sql-server - 用于创建索引的 Include 子句

标签 sql-server t-sql

我可以知道 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)

谢谢

最佳答案

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

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

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

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

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

关于sql-server - 用于创建索引的 Include 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530233/

相关文章:

sql-server - TSql 触发器只需要在值已更改的列上触发

sql - 使用 SQL Server 创建一对多关系

sql-server - 将多行合并为一行

sql-server - SQL Server 2005 : File Resizing

sql-server - 如何使用保留顺序的运行计数形成查询

sql - 必须分组才能聚合吗?

带有 MSSQL 的 PHP 未安装在 centos 7 中

SQL:合并具有相同ReferenceID的记录

sql-server - 如何优化 T-SQL 存储过程以搜索源表并将新记录插入目标表

SQL DATEDIFF 如果数字为正则添加加号