CHECKSUM/BINARY_CHECKSUM 和 HASHBYTES 的选择
CHECKSUM 满足哈希函数的下列属性:在使用等于 (=) 运算符比较时,如果两个列表的相应元素具有相同类型且相等,则在任何两个表达式列表上应用的 CHECKSUM 将返回同一值。 对于该定义,指定类型的 Null 值被作为相等进行比较。 如果表达式列表中的某个值发生更改,则列表的校验和通常也会更改。 但只在极少数情况下,校验和会保持不变。 因此,我们不推荐使用 CHECKSUM 来检测值是否更改,除非应用程序可以容忍偶尔丢失更改。 请考虑改用 HashBytes。 指定 MD5 哈希算法时,HashBytes 为两个不同输入返回相同结果的可能性比 CHECKSUM 小得多。
在SQL中创建一个短的CHECKSUM或HASH代码,可以选择用CHECKSUM、BINARY_CHECKSUM或HASHBYTES。
HASHBYTES是确保低冲突的最佳选择,而BINARY_CHECKSUM是最糟糕的。可以通过下面的语句来比较下性能:
1
2
3
4
|
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。
本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1607411 ,如需转载请自行联系原作者