博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CHECKSUM/BINARY_CHECKSUM 和 HASHBYTES 的选择
阅读量:6719 次
发布时间:2019-06-25

本文共 823 字,大约阅读时间需要 2 分钟。

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 ,如需转载请自行联系原作者
你可能感兴趣的文章
魔域深渊
查看>>
ffmpeg 去除图片中的水印
查看>>
将博客搬至CSDN
查看>>
Java线程创建形式 Thread构造详解 多线程中篇(五)
查看>>
Hexo博客系列(二)-在多台机器上利用Hexo发布博客
查看>>
C语言参考程序—无符号一位整数的四则运算
查看>>
逻辑电路 - 与门And Gate
查看>>
win server 挂载
查看>>
PSR-2 编码风格规范
查看>>
Linux上Java的安装与配置
查看>>
Laravel使用Carbon人性化显示时间
查看>>
我的友情链接
查看>>
SQL 2008 R2安装部署及端口开放
查看>>
oracle 日期函数总结
查看>>
11.11即将到来,华为云学院精品课程免费推荐奉上
查看>>
MAC OS 密码忘记 重置方法
查看>>
GNS3中支持的模块
查看>>
反垃圾邮件神器--开源邮件网关ScrolloutF1之一--安装及更新
查看>>
Centos6.8系统怎么解决“/boot”分区满了
查看>>
关于空指针的解决办法
查看>>