【发布时间】:2020-08-01 14:48:26
【问题描述】:
我需要创建一个带有 256 位哈希数的键的表。快速搜索和检索至关重要,所以我想知道使用什么数据结构作为键?
一个选项是 varchar[32],但我想搜索会很慢。存储的数据量将远高于数值解。
第二个选项是两个不同的十进制 [16] 整数并将它们组合成一个复合键,但我怀疑这是否会比选项 #1 具有更快的搜索性能。
我搜索了该主题,但没有找到解决方案;也许是第三种选择?任何提示表示赞赏。
【问题讨论】:
-
如果它是一个哈希,那么它对主键没有好处!主键必须是唯一的,而哈希不是根据定义。您要解决的实际问题是什么?
-
如果您的 256 位哈希值是自然键,请将其存储为正确的数据类型 binary(32) 并使其成为主键聚集索引以最大限度地提高性能。不过,请考虑@MitchWheat 关于碰撞的评论。另外,race your horses 只是一个猜测,并询问我们对性能的看法。
-
@MitchWheat,感谢您的提示,但老实说:256 位哈希上的冲突?当前的硬盘驱动器没有存储如此多的数据,以至于您和我可能会在我们的一生中看到这样的表发生冲突(如果真的如此,在这种情况下无论如何都无关紧要)。当然,小散列值是正确的。
-
@DanGuzman 感谢您的提示,二进制我没有想到,我将测试所有 3 个选项并测量性能。
-
@MitchWheat,考虑到生日悖论,为了有 50% 的概率找到碰撞,你“只”需要尝试 2^128 个不同的值。 crypto.stackexchange.com/questions/47809/…
标签: sql-server types integer