在MS SQL Server中创建索引时,INCLUDE()函数的作用是什么?

在MS SQL Server中创建索引时,INCLUDE()函数的作用是什么?,sql,sql-server,indexing,clustered-index,Sql,Sql Server,Indexing,Clustered Index,使用INCLUDE函数创建索引与不创建索引有什么区别 以下两个指数之间有什么区别 CREATE NONCLUSTERED INDEX SomeName ON SomeTable ( ColumnA ,ColumnB ,ColumnC ,ColumnD ) INCLUDE ( ColumnE ,ColumnF ,ColumnG ) vs 当执行计划使用索引时,它可以访问索引中的所有列。如果给定表中的所有列都在索引中,则无需引

使用
INCLUDE
函数创建索引与不创建索引有什么区别

以下两个指数之间有什么区别

CREATE NONCLUSTERED INDEX SomeName ON SomeTable (
    ColumnA
    ,ColumnB
    ,ColumnC
    ,ColumnD
    ) INCLUDE (
    ColumnE
    ,ColumnF
    ,ColumnG
    )
vs


当执行计划使用索引时,它可以访问索引中的所有列。如果给定表中的所有列都在索引中,则无需引用原始数据页。消除数据页查找可以提高效率

但是,在索引中包含列会增加索引结构本身的开销(除了复制值之外)


INCLUDE
关键字允许在索引中包含列值,而不会产生额外索引结构的开销。其目的是解决查询,而不必在原始数据页上查找列信息。

当执行计划使用索引时,它可以访问索引中的所有列。如果给定表中的所有列都在索引中,则无需引用原始数据页。消除数据页查找可以提高效率

但是,在索引中包含列会增加索引结构本身的开销(除了复制值之外)


INCLUDE
关键字允许在索引中包含列值,而不会产生额外索引结构的开销。其目的是解决查询,而不必在原始数据页上查找列信息。

INCLUDE子句将数据添加到最低/叶级,而不是索引树中。这使得索引更小,因为它不是树的一部分

INCLUDE
列不是索引中的关键列,因此不按顺序排列。这意味着它对谓词、排序等并没有真正的用处。。但是,如果在键列的几行中有剩余的查找,则它可能很有用

INCLUDE
列不是索引中的关键列,因此不按顺序排列。这使得它们通常不适用于联接或排序。因为它们不是键列,所以它们不像键列那样位于整个B树结构中

通过添加Include(或nonkey)列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有以下优点:

  • 它们可以是不允许作为索引键列的数据类型
  • 在计算索引键列数或索引键大小时,数据库引擎不考虑它们
当查询中的所有列都作为键列或非键列包含在索引中时,包含列的索引可以显著提高查询性能。由于查询优化器可以定位索引中的所有列值,因此获得了性能增益;未访问表或聚集索引数据,导致磁盘I/O操作减少


有关更多信息,请参阅Microsoft文档:

INCLUDE子句将数据添加到最低/leaf级别,而不是索引树中。这使得索引更小,因为它不是树的一部分

INCLUDE
列不是索引中的关键列,因此不按顺序排列。这意味着它对谓词、排序等并没有真正的用处。。但是,如果在键列的几行中有剩余的查找,则它可能很有用

INCLUDE
列不是索引中的关键列,因此不按顺序排列。这使得它们通常不适用于联接或排序。因为它们不是键列,所以它们不像键列那样位于整个B树结构中

通过添加Include(或nonkey)列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有以下优点:

  • 它们可以是不允许作为索引键列的数据类型
  • 在计算索引键列数或索引键大小时,数据库引擎不考虑它们
当查询中的所有列都作为键列或非键列包含在索引中时,包含列的索引可以显著提高查询性能。由于查询优化器可以定位索引中的所有列值,因此获得了性能增益;未访问表或聚集索引数据,导致磁盘I/O操作减少

有关更多信息,请参阅Microsoft文档:

CREATE INDEX SomeName ON SomeTable (
    ColumnA
    ,ColumnB
    ,ColumnC
    ,ColumnD
    ,ColumnE
    ,ColumnF
    ,ColumnG
    )