在SQL Server或者任何其他的数据库环境中,索引都是一个基本的主题,而且是不可轻视的。他们有助于获得良好的性能,但也可能导致奇差的性能。


关于索引要考虑的几个首要问题:

  1. 群集索引通常比非群集索引快(也可以说前者总是比后者快,但是也有些例外。群集索引是唯一的,而非群集索引是非唯一的。)
  2. 仅在将得到高级别选择性的列(也就是说,95%或者更多的行市唯一的)上放置非群集索引。
  3. 所有的数据操作语言(DML:insert,update,delete,select)语句可以通过索引获益,但是插入、删除和更新(记住,它们使用删除和插入方法)会因为索引而变慢。索引有助于查询的查找过程,但是任何修改数据行为将有额外的工作要做(除了实际数据外,还要维护索引)。
  4. 索引会占用空间。
  5. 仅当索引中的第一列和查询相关时才使用索引。
  6. 索引的负面影响和它的正面影响一样多——了解为什么建立索引,以及为什么只建立需要的索引。
  7. 索引可为非结构化XML数据提供结构化的数据性能,但是要记住,和其他索引一样,这会涉及系统开销。


建立索引时需要重要考虑的问题:


  1. 会对这个表进行大量插入或者修改吗?

答:如果是,尽量减少索引。这种类型的表通常通过主键的单个记录查找完成修改——这往往是该表上需要的唯一索引。如果插入是非连续的,不考虑使用群集索引。

  1. 这是个报表吗?也就是说,这里没有许多插入,但是会以许多不同的方法运行报表吗?

答:有更多索引是好的。将群集索引确定为频繁使用的、可能会在范围内提取的信息。OLAP系统中的索引数目通常是OLTP环境中所看到的很多倍。

  1. 在数据上有高级别的选择性吗?

答:如果是,而且它通常是where字句的目标,那么添加索引。

  1. 已经删除不再需要的索引吗?

答:如果没有,为什么不删除?

  1. 已建立了维护策略么?

答:如果没有,为什么不建立?


在使用数据库索引时,会遇到很多的问题。需要在各个过程中去寻找索引的最佳使用策略,当然整个数据库,在后期的运维和优化的过程中,也会涉及到很多关于索引的问题。