sql >> Databáze >  >> RDS >> Sqlserver

Jaké jsou rozdíly mezi CHECKSUM() a BINARY_CHECKSUM() a kdy/jaké jsou vhodné scénáře použití?

Podívejte se na následující blogový příspěvek, který zdůrazňuje rozdíly.

http://decipherinfosys.wordpress. com/2007/05/18/checksum-functions-in-sql-server-2005/

Přidávání informací z tohoto odkazu:

Klíčovým záměrem funkcí CHECKSUM je vytvořit hash index na základě výrazu nebo seznamu sloupců. Řekněme, že jej používáte k výpočtu a uložení sloupce na úrovni tabulky k označení kontrolního součtu nad sloupci, díky nimž je záznam v tabulce jedinečný, může to být užitečné při určování, zda se řádek změnil nebo ne. Tento mechanismus pak lze použít místo spojení se všemi sloupci, díky nimž je záznam jedinečný, abyste viděli, zda byl záznam aktualizován nebo ne. SQL Server Books Online má mnoho příkladů této funkce.

Při používání těchto funkcí je třeba dávat pozor na několik věcí:

Musíte se ujistit, že pořadí sloupců nebo výrazů je mezi dvěma porovnávanými kontrolními součty stejné, jinak by se hodnota lišila a vedlo by to k problémům.

Nedoporučovali bychom používat checksum(*), protože hodnota, která bude tímto způsobem vygenerována, bude založena na pořadí sloupců definice tabulky za běhu, které se může v průběhu času snadno změnit. Explicitně tedy definujte výpis sloupců.

Při zahrnutí sloupců datového typu datetime buďte opatrní, protože granularita je 1/300 sekundy a i malá odchylka povede k jiné hodnotě kontrolního součtu. Pokud tedy musíte použít sloupec typu datetime, ujistěte se, že získáte přesné datum + hodinu/min. tj. úroveň podrobnosti, kterou chcete.

K dispozici máte tři funkce kontrolního součtu:

KONTROLNÍ SOUČET:Toto bylo popsáno výše.

CHECKSUM_AGG:Vrátí kontrolní součet hodnot ve skupině a hodnoty Null jsou v tomto případě ignorovány. To také funguje s klauzulí OVER nové analytické funkce v SQL Server 2005.

BINARY_CHECKSUM:Jak název napovídá, vrací hodnotu binárního kontrolního součtu vypočítanou na řádku nebo seznamu výrazů. Rozdíl mezi CHECKSUM a BINARY_CHECKSUM je v hodnotě generované pro datové typy řetězců. Příkladem takového rozdílu jsou hodnoty generované pro „DECIPHER“ a „decipher“ se budou lišit v případě BINARY_CHECKSUM, ale budou stejné pro funkci CHECKSUM (za předpokladu, že máme instalaci instance bez ohledu na malá a velká písmena). Další rozdíl je ve srovnání výrazů. BINARY_CHECKSUM() vrací stejnou hodnotu, pokud mají prvky dvou výrazů stejný typ a bajtovou reprezentaci. Takže „2Volvo Director 20“ a „3Volvo Director 30“ poskytnou stejnou hodnotu, ale funkce CHECKSUM() vyhodnotí typ a také porovná dva řetězce, a pokud jsou stejné, vrátí se pouze stejná hodnota.

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


  1. Aktualizujte hodnocení v tabulce MySQL

  2. více přidaných entit může mít stejný primární klíč na databázovém zdroji

  3. PostGIS:Dotaz na rozměry z a m (linestringzm)

  4. Přesun MySql ze serveru Windows na linux