Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jakie są różnice między CHECKSUM() i BINARY_CHECKSUM() i kiedy/jakie są odpowiednie scenariusze użycia?

Sprawdź następujący post na blogu, który podkreśla różnice.

http://decipherinfosys.wordpress. com/2007/05/18/suma-kontrolna-funkcje-w-sql-server-2005/

Dodawanie informacji z tego linku:

Kluczowym celem funkcji SUMA KONTROLNA jest zbudowanie indeksu skrótu na podstawie wyrażenia lub listy kolumn. Jeśli powiedzmy, że używasz go do obliczania i przechowywania kolumny na poziomie tabeli w celu oznaczenia sumy kontrolnej nad kolumnami, które czynią rekord unikalnym w tabeli, może to być pomocne w ustaleniu, czy wiersz się zmienił, czy nie. Tego mechanizmu można następnie użyć zamiast łączenia ze wszystkimi kolumnami, które czynią rekord unikalnym, aby sprawdzić, czy rekord został zaktualizowany, czy nie. SQL Server Books Online zawiera wiele przykładów tego elementu funkcjonalności.

Kilka rzeczy, na które należy zwrócić uwagę podczas korzystania z tych funkcji:

Musisz upewnić się, że kolejność kolumn lub wyrażeń jest taka sama w dwóch porównywanych sumach kontrolnych, w przeciwnym razie wartość będzie inna i doprowadzi do problemów.

Nie zalecamy używania sumy kontrolnej(*), ponieważ wartość, która zostanie wygenerowana w ten sposób, będzie oparta na kolejności kolumn definicji tabeli w czasie wykonywania, która może się łatwo zmieniać w czasie. Dlatego wyraźnie zdefiniuj listę kolumn.

Zachowaj ostrożność podczas dołączania kolumn typu data/godzina, ponieważ ziarnistość wynosi 1/300 sekundy, a nawet niewielka zmiana spowoduje uzyskanie innej wartości sumy kontrolnej. Tak więc, jeśli musisz użyć kolumny typu data/godzina, upewnij się, że otrzymujesz dokładną datę + godzinę/minutę. tj. żądany poziom szczegółowości.

Dostępne są trzy funkcje sumy kontrolnej:

SUMA KONTROLNA:Zostało to opisane powyżej.

CHECKSUM_AGG:Zwraca sumę kontrolną wartości w grupie, a wartości Null są w tym przypadku ignorowane. Działa to również z klauzulą ​​OVER nowej funkcji analitycznej w SQL Server 2005.

BINARY_CHECKSUM:Jak sama nazwa wskazuje, zwraca wartość binarnej sumy kontrolnej obliczonej dla wiersza lub listy wyrażeń. Różnica między CHECKSUM i BINARY_CHECKSUM polega na wartości generowanej dla typów danych ciągu. Przykładem takiej różnicy jest to, że wartości wygenerowane dla „DECIPHER” i „decipher” będą różne w przypadku BINARY_CHECKSUM, ale takie same dla funkcji CHECKSUM (zakładając, że mamy instalację niewrażliwą na wielkość liter). Kolejna różnica dotyczy porównania wyrażeń. BINARY_CHECKSUM() zwraca tę samą wartość, jeśli elementy dwóch wyrażeń mają ten sam typ i reprezentację bajtową. Tak więc „2Volvo Director 20” i „3Volvo Director 30” dadzą tę samą wartość, jednak funkcja CHECKSUM() ocenia typ oraz porównuje dwa ciągi i jeśli są równe, zwracana jest tylko ta sama wartość.

Example:
STRING              BINARY_CHECKSUM_USAGE    CHECKSUM_USAGE
------------------- ----------------------    -----------
2Volvo Director 20  -1356512636                -341465450
3Volvo Director 30  -1356512636                -341453853
4Volvo Director 40  -1356512636                -341455363


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pole datownika automatycznej aktualizacji programu SQL Server

  2. jak podłączyć serwer sql za pomocą sterownika JTDS w systemie Android

  3. Wyniki oddzielone przecinkami w SQL

  4. Proaktywne kontrole kondycji programu SQL Server, część 3:ustawienia instancji i bazy danych

  5. Ile kolumn jest za dużo dla tabeli SQL Server 2005?