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是最糟糕的。可以通过下面的语句来比较下性能:

 

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 ,如需转载请自行联系原作者







相关文章
|
关系型数据库 MySQL
pt-table-checksum原理详解
环境 MySQL: MySQL 5.6.27 OS: centos 6.6 tool: pt-table-checksum 2.2.15 它能做什么 业界最流行的MySQL主从数据对比工具,数据一致性检测最好的的工具,没有之一 如何使用 ./pt-table-che
7328 0
|
9月前
|
存储 算法 Serverless
GPDB中AOCO列存页的checksum
GPDB中AOCO列存页的checksum
53 0
|
11月前
|
关系型数据库 数据库 索引
pt-table-checksum
pt-table-checksum是目前可以说是最好的查看主从一致性的工具 先来个使用例子,有助快速上手使用 在主库执行:mysql>GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON .
1643 0
|
存储 PHP