技术开发 频道

SQL Server应用程序性能调优之SQL编程

  选择聚集索引的技巧

  由于对每一个表只能创建一个聚集索引,因此有必要多花些时间来仔细的考虑如何创建它。考虑下需要对表进行查询的类型,判断一下哪一个索引是最关键的,以及具有一个聚集索引是否对该查询的性能提高有帮助。一般来说,当选择一个列进行聚集索引时,需要规则来进行衡量。

  表的主键并不一定总是一个聚集索引。如果你创建了主键,且没有指定其它聚集索引,那么SQL Server会自动将主键作为聚集索引。将主键作为聚集索引的推荐情况如下。

  如果你需要一个分类结果,那么聚集索引对该查询比较适合。因为数据已经在索引中预先进行了分类。例如,当你的查询中使用了BETWEEN、<、>、GROUP BY、ORDER BY以及诸如MAX、MIN和COUNT之类的聚合操作时,适合使用聚集索引。

  当你需要查询一个具有唯一值的记录,以及当你需要一条记录中的多数或全部数据时,选择聚集索引比较合适。因为这类查询会被该索引所包含。

  聚集索引适合那些使用JOIN或GROUP BY子句的查询。

  聚集索引适合那些需要返回大量行数据的查询,因为这些数据在索引中,就不再用到处查阅。

  如果在你的表中有多列需要进行聚集,那么以上建议可能适用性不大。但是我们知道,每一个表只能有一个聚集索引。这种情况下,我们需要对所有可能进行评估,然后选择可以带来最大整体性能提高的那一个。

  选择非聚集索引的技巧

  选择非聚集索引相对来说简单一些,因为你可以根据需要对你的表建立多个索引。以下技巧可以帮助你选择对哪一列添加非聚集索引。

  对于需要返回较少行数据的查询,最适合使用非聚集索引。不过,如同上面所提到的,如果数据表中某一列的数值不满足95%上是唯一的,那么SQL Server查询优化器不会使用该列的非聚集索引,因此不要对该列添加非聚集索引。例如,如果某一列的数据就是“yes”和“no”,它就不适合使用非聚集索引。

  保持索引的“width”尽可能的窄,尤其是当你创建组合(多列)索引时更是如此。这可以降低索引的大小,降低对该索引进行读操作的数量,从而提升性能。

  如果可能的话,尽量针对包含整数值的列创建索引,尽量不要对字符列创建索引。整数值所需要的开销比字符值要少。

  如果你确信你的应用程序会反复对同一个表进行相同的查询,那么可以考虑对该表创建一个covering索引。一个covering索引包含在查询中引用的全部列。这样,索引包含你要查找的数据,SQL Server就不用必须去表中查看实际的数据,可以减少逻辑或物理上的I/O。另一方面,如果索引太大,也会增加I/O,降低性能。

  总体来说,如果表只需要一个索引,可以对其添加聚集索引。如果表需要多个索引,那么你只能使用非聚集索引。通过遵循以上建议,你应该更容易为你的数据表选择非常好的索引。
 

0
相关文章