索引创建的Include子句

时间:2011-06-30 05:18:13

标签: sql-server tsql

我可以知道include子句如何提高覆盖索引的性能吗?

CREATE NONCLUSTERED INDEX includeIndex
  ON mytable(COL1)
  INCLUDE(COL2,COL3,COL3)

有什么区别
CREATE NONCLUSTERED INDEX includeIndex ON mytable(COL1) INCLUDE(COL2,COL3,COL3)

CREATE NONCLUSTERED INDEX nonincludeIndex ON mytable(COL1,COL2,COL3,COL3)

谢谢

2 个答案:

答案 0 :(得分:2)

您可以通过将非键列添加到非聚簇索引的叶级别来扩展非聚簇索引的功能。通过包含非键列,您可以创建涵盖更多查询的非聚簇索引。这是因为非键列具有以下好处:

它们可以是不允许作为索引键列的数据类型。

在计算索引键列数或索引键大小时,数据库引擎不会考虑它们。

当查询中的所有列都作为键列或非键列包含在索引中时,包含非键列的索引可以显着提高查询性能。由于查询优化器可以在索引中找到所有列值,因此可以实现性能提升;不访问表或聚簇索引数据,从而减少磁盘I / O操作。

http://msdn.microsoft.com/en-us/library/ms190806.aspx

答案 1 :(得分:1)

如果您的查询只查询索引中的字段(包括包含的字段),那么在找到要返回sql处理器的行之后,fdoes不必加载实际数据页来获取数据。那么简单。它只能从索引中回答查询。