使用校验和作为主键时可以有多少行?
CHECKSUM
返回 int
,因此理论上你可以有 2^32 = 4294967296 个唯一值。但在现实生活中,你永远不会达到这个数字,因为校验和可以为不同的参数返回相同的结果。因此,您永远不应该将校验和结果用作PK。
不要使用校验和作为主键,因为它们不是唯一的。创建一个普通的自动递增 PK,一个校验和列,并在需要时向其添加索引。
原因如下:哈希值容易发生冲突。冲突是指 2 个不同的输入产生相同的哈希值。这不太可能发生,但很有可能。例如,文本为"plumless"的文件的CRC32与文本"buckeroo"完全相同。"编码"与"gnu"也是如此。
当您获得大约 250.000 行时,冲突的机会(因此重复 PK)对您来说会变得相当高。
来源
- http://preshing.com/20110504/hash-collision-probabilities/
- http://www.lammertbies.nl/comm/info/crc-calculation.html
- https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed/145633#145633