我创建了脚本来查找所有表的每列的选择性.在一些行少于100行的表中,列的选择性超过50%.
选择性=不同的值/总行数.这些列是否有资格获得索引?或者,您能告诉我创建索引的行数的最低要求吗?
选择性=不同的值/总行数.这些列是否有资格获得索引?或者,您能告诉我创建索引的行数的最低要求吗?
解决方法
你可以索引任何列 – 问题是它是否有意义以及是否将使用该索引….
通常,选择性小于1-5%可能有效 – 百分比越小越好.最好的是大群体中的单个值,例如一个单一的客户ID数十万 – 肯定会使用这些指数.
诸如性别(仅2个值)或仅具有非常有限数量的可能值的其他事物通常在索引上不能很好地工作.至少在他们自己的位置 – 这些列可能可以作为第二列或第三列包含在另一个索引中.
但实际上,找出索引是否有意义的唯一方法是
>之前测量您的查询
>创建索引
>再次运行您的查询,检查他们的执行计划,测量他们的时间
关于什么时候使用(或忽略)索引没有黄金法则 – 太多的变量会影响到这个决定.
有关如何处理索引的专家建议,以及如何找出哪些索引可能无法使用,以及何时创建索引是有意义的,请参阅Kimberly Tripp的博客文章:
> Spring cleaning your indices (part 1)
> Spring cleaning your indices (part 2)
> Why aren’t those non-clustered indices being used?