选择性在索引扫描/搜索中的作用

Sex*_*ast 8 sql indexing query-optimization

我一直在阅读许多SQL书籍和文章中,选择性是创建索引的重要因素.如果色谱柱的选择性较低,则索引搜索会带来更大的危害.但这些文章都没有解释原因.任何人都可以解释为什么会这样,或提供相关文章的链接?

Yar*_*lav 8

来自Robert Sheldon的SimpleTalk文章:14个SQL Server索引问题,你太害羞了

关键列中唯一值的比率称为索引选择性.值越独特,选择性越高,这意味着唯一索引具有尽可能高的选择性.查询引擎喜欢高度选择性的键列,尤其是在经常运行的查询的WHERE子句中引用这些列的情况下.选择性越高,查询引擎可以越快地减小结果集的大小.当然,另一方面,具有相对较少的唯一值的列很少是被索引的好候选者.

另请查看这些文章:

从SqlServerCentral文章:

通常,非聚集索引应该是选择性的.也就是说,列中的值应该是相当独特的,并且对其进行过滤的查询应该返回表的一小部分.

这样做的原因是密钥/ RID查找是昂贵的操作,并且如果要使用非聚集索引来评估查询,则需要覆盖或有足够的选择性以使查找的成本不被认为太高.

如果SQL认为索引(或查询将要搜索的索引键的子集)选择性不足,则很可能忽略索引并将查询作为聚簇索引(表)扫描执行.

重要的是要注意,这不仅适用于前导列.在某些情况下,非常非选择性的列可以用作前导列,索引中的其他列使其具有足够的选择性以供使用.