Did*_*doo 6 sql sql-server indexing binary performance
我在 Microsoft SQL Server 2012 数据库中存储小于或等于 64 位的固定大小的二进制哈希。二进制散列的大小也可以是 48 位或 32 位。每个散列都有一个标识符Id。表结构是这样的:
Id int NOT NULL PRIMARY KEY,
Hash binary(8) NOT NULL
Run Code Online (Sandbox Code Playgroud)
Hash出于性能目的和快速查找哈希的方法,我在列上创建了非聚集索引。我还尝试创建整数列而不是binary(n)依赖 bytes n。例如,我将列类型从 更改binary(4)为int。
是指数之间的列类型有差异binary(8)和bigint之间或binary(4)和int等等?
将散列存储为整数以提高搜索性能是否合理?
在幕后,索引被限制为一定的字节长度。IO越小越好。一旦您获得了感兴趣的值,就可以很容易地使用 Convert(varbinary(25),Hash) 语法在数据类型之间进行转换。当您查找记录时,您不想调用大量转换者。
如果存在差异,则可能是由于所使用的排序规则或统计数据造成的,这只是表示两个值之间是否有一个大于、小于或等于。静态使查询能够查看大量值,因为它“知道”数据分布。
当您有一个大字符串并尝试执行“%value”查找之类的操作时,索引并没有多大好处。哈希值应该是随机的。这意味着重点是通过比较来做出查询决策的字节数。越少越好。
每个数据库工程师都会告诉你的无用但准确的 cya,这取决于你应该测试它。