技术开发 频道

详解SQL Server数据库索引

  二、选择建立哪种索引

  1.何时创建聚集索引更能提高性能

  Clustered Index会提高大多数table的性能,尤其是当它满足以下条件时:

  独特, 狭窄, 持续增长的,最好是只向上增加。例如:

  •Identity

  •Date, identity

  •GUID (only when using newsequentialid() function)

  2.非聚集索引提高性能的方法

  非聚集索引由于B树的节点不是具体数据页,有时候由于这个原因,会导致非聚集索引甚至不如表遍历来的快。但是,非聚集索引有个特性,如果你要查询的内容,在非聚集索引中以及被覆盖到了,则不需要继续到聚集索引,或者RID(heap结构中的行标识符)中去寻找数据了,这时候就可以很大的提高性能,这就是 覆盖面(Covering) 的问题。

  由于聚集索引叶子节点就是具体数据,所以聚集索引的覆盖率是 100%, 通过提高覆盖面来提高性能的问题也就只有非聚集索引(Nonclustered Indexes)才存在。

  当查询中所有的columns 都包括在index上时,我们说这个 index covers the query. Columns的顺序在此不重要(Select 时候的顺序不重要,但是Index 建立的顺序可得小心了)。

  在 SQL Server 2005 中,为了提高这种 Covering 带来的好处,甚至可以通过将非键列添加到非聚集索引的叶级别来扩展非聚集索引的功能。

  补充:只有查询在具有高度选择性的情况下,非聚集索引才有优势。

0
相关文章