SQL Server 非聚集索引在二进制和整数列上的搜索性能

qxsslcnc  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(125)

我在Microsoft SQL Server 2012数据库中存储了小于等于64位的固定大小的二进制散列,二进制散列的大小也可以是48位或32位,每个散列都有一个标识符Id,表结构如下:

Id int NOT NULL PRIMARY KEY,
Hash binary(8) NOT NULL

我在Hash列上创建了非聚集索引,以提高性能并快速查找散列。此外,我还尝试根据字节n创建整数列而不是binary(n)。例如,我将列类型从binary(4)更改为int
列类型binary(8)bigint上的索引之间或binary(4)int之间是否存在差异?
将散列存储为整数以提高搜索性能是否合理?

sxpgvts3

sxpgvts31#

实际上,索引被限制在一定的字节长度内,越小越有利于IO。一旦你有了感兴趣的值,使用convert(varbinary(25),Hash)语法在数据类型之间进行转换就足够容易了。你不想在查找记录时调用大量的转换。
如果存在差异,则可能是由于所使用的排序规则或统计信息所致,它们只表示两个值之间的值是大于、小于还是等于。统计信息使查询能够查看过去的许多值,因为它“知道”数据分布。
当你有一个很大的字符串并且你试图做类似于'%value'的查找时,索引并没有太大的好处。哈希应该是随机的。这意味着重点是比较的字节数来做出查询决定。越少越好。
每个数据库工程师都会告诉你的没有帮助但准确的cya,这取决于你应该测试它。

相关问题