1. 是否值得建索引的三个考虑因素:选择性(符合条件的记录数/总记录数目)、数据密度(1/键值惟一的记录数)、数据分布(代表数据记录是平均散布在一段范围中,还是集中在部分区块)。
  2. 某一列是否适合作为索引的键(选择性是否小、数据密度是否小、数据分布是否是不平均分布,优先级从左向右)。
  3. 当索引的键由多个列组成时,(选择性小的、数据密度小的、数据分布较不均匀的,优先级从左向右)列要放在前面。
  4. 为什么某个查询语句用不上索引或者用不上索引Seek呢(可能的原因是利用此索引的选择性并不高,例如,表中有1000条记录,此查询却取出了900条记录)。
  5. Where后各个列的顺序与索引中键值列的顺序没有任何关系(例如,“ Where 列A=XX and 列B=XX  ”与“ Where 列B=XX and 列A=XX ”都同样能用上索引“ Idx_列A_列B ”)。
  6. Where后所有的列不需要全部成为索引的键值列。
  7. 索引Seek不能跳过列去Seek(例如:建有索引“ Idx_列A_列B_列C ”,有一查询“ Where 列A=XX and 列C=XX ”,此时在查询执行计划中,会看到利用索引的Seek谓词为“ 列A=XX ”;建有索引“ Idx_列A_列B_列C ”,有一查询“ Where 列A=XX and 列B=XX ”,此时在查询执行计划中,会看到利用索引的Seek谓词为“ 列A=XX,列B=XX ”;建有索引“ Idx_列A_列B ”,有一查询“ Where 列B=XX ”,此时在查询执行计划中,会看到无法利用索引Seek;)。
  8. 某个查询通过非聚集索引Seek后,还要进行聚集索引Seek,出现这种问题的原因是非聚集索引中并没有包含查询要取出的、要使用的所有列,此时可以通过将这些未包含的列加入索引的Include列,从而避免进行聚集索引Seek。
  9. 永恒的真理:看查询语句的效率是否有提升,从而判断出索引的好坏。
posted on 2010-02-04 20:12  znyin  阅读(189)  评论(0编辑  收藏  举报