sql-server – SQL Server哈希索引

前端之家收集整理的这篇文章主要介绍了sql-server – SQL Server哈希索引前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当使用CHECKSUM列类型人工创建散列索引时,查找实际上是O(1)还是仍然是O(lg n),就像聚类索引一样?我有一个表,我将根据其ID列选择,我需要查找尽可能快,聚集索引是最快的可能选项吗?我正在寻找可以提供O(1)性能的东西.

解决方法

好的,2分.
sql CHECKSUM函数不产生哈希值.它实际上计算CRC值.基于哈希检查不是一个非常好的候选人,因为会有相对大量的碰撞.如果你想要哈希函数,你应该检查hash_bytes函数.
其次,您实际上并没有创建一个散列索引.您正在哈希值上创建一个正常的B树,因此查找时间将与类似大小的数据类型上的任何其他b-tree索引完全相同.
有一个机会,您可以通过使用一个长的varchar值的CRC或哈希来获得一点表现,以允许比较较少的字节数,但字符串比较只能检查尽可能多的字节,第一个不匹配的字符,如果您使用散列值匹配,则需要双重检查实际值.所以除非你有很多非常相似的字符串,否则可能会使用哈希(或CRC)来比较更多的字节.

简而言之,我不认为这是一个明智的计划,但是与所有优化一样,您应该在具体情况下对其进行测试,然后决定.如果您愿意发布,我将有兴趣查看您的结果.而且我不认为在sql Server中找到一行比使用聚簇索引有更快的方法.

如果你关心,Ingres(通过CA)可以创建哈希索引,然后将O(1).可能还有其他RDBM也支持真正的哈希索引.

原文链接:https://www.f2er.com/mssql/76093.html

猜你在找的MsSQL相关文章