CHECKSUM/BINARY_CHECKSUM 和 HASHBYTES 的选择

CHECKSUM/BINARY_CHECKSUM 和 HASHBYTES 的选择

CHECKSUM 满足哈希函数的下列属性:在使用等于 (=) 运算符比较时,如果两个列表的相应元素具有相同类型且相等,则在任何两个表达式列表上应用的 CHECKSUM 将返回同一值。 对于该定义,指定类型的 Null 值被作为相等进行比较。 如果表达式列表中的某个值发生更改,则列表的校验和通常也会更改。 但只在极少数情况下,校验和会保持不变。 因此,我们不推荐使用 CHECKSUM 来检测值是否更改,除非应用程序可以容忍偶尔丢失更改。 请考虑改用 HashBytes。 指定 MD5 哈希算法时,HashBytes 为两个不同输入返回相同结果的可能性比 CHECKSUM 小得多。

 

在SQL中创建一个短的CHECKSUM或HASH代码,可以选择用CHECKSUM、BINARY_CHECKSUM或HASHBYTES。

 

HASHBYTES是确保低冲突的最佳选择,而BINARY_CHECKSUM是最糟糕的。可以通过下面的语句来比较下性能:

 

DECLARE @timeStart AS DATETIME;
SET @timeStart = GETDATE();
SELECT MAX(HASHBYTES('MD5',x)) FROM y;
SELECT DATEDIFF(ms,@timestart,GETDATE());

 

测试发现,BINARY_CHECKSUM的速度和CHECKSUM一样,明显快于MD5加密的HASHBYTES。

 

所以,建议如果相对准确性你更注重速度,使用CHESKSUM,而不是BINARY_CHECKSUM。如果相对速度你更注重准确性,使用HASHBYTES。



你可能感兴趣的:(CHECKSUM/BINARY_CHECKSUM 和 HASHBYTES 的选择)