Sql server 用于创建索引的Include子句

Sql server 用于创建索引的Include子句,sql-server,tsql,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) 及 谢谢如果您的查询只查询索引中的字段(包括包含的字段),那么在找到要返回的行之后,sql处理器

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

CREATE NONCLUSTERED INDEX includeIndex
  ON mytable(COL1)
  INCLUDE(COL2,COL3,COL3)
两者的区别是什么

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


谢谢

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

您可以通过向非聚集索引的叶级添加非键列来扩展非聚集索引的功能。通过包含非键列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有以下优点:

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

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

当查询中的所有列都作为键列或非键列包含在索引中时,包含非键列的索引可以显著提高查询性能。由于查询优化器可以定位索引中的所有列值,因此获得了性能增益;未访问表或聚集索引数据,导致磁盘I/O操作减少


什么?你能重新表述一下这一点并格式化这个问题吗?我读了一些文章,其中使用以下定义创建索引“在mytable上创建非聚集索引includeIndex(COL1)INCLUDE(COL2,COL3,COL3)”比在mytable上创建非聚集索引includeIndex(COL1,COL2,COL3,COL3)的优化效果更好……但我不知道性能是如何提高的
CREATE NONCLUSTERED INDEX nonincludeIndex ON mytable(COL1,COL2,COL3,COL3)