Sql server 2008 覆盖索引是否重复数据?

Sql server 2008 覆盖索引是否重复数据?,sql-server-2008,covering-index,Sql Server 2008,Covering Index,假设我们有这个索引 CREATE INDEX IX_test ON t1(c1) INCLUDE (c2) 这是否意味着我们将在索引页和实际数据页中都有c2?真正的问题是-更新c2是否意味着SQL Server必须更新IX_测试和实际数据行(聚集索引)?聚集索引是表的一部分,因此它只是更新表本身。如果是非聚集索引,那么答案是肯定的 丛生 创建一个索引,其中键值的逻辑顺序决定表中相应行的物理顺序。聚集索引的底部或叶级包含表的实际数据行。允许表或视图一次使用一个聚集索引。有关详细信息,请参见聚集索

假设我们有这个索引

CREATE INDEX IX_test ON t1(c1) INCLUDE (c2)

这是否意味着我们将在索引页和实际数据页中都有c2?真正的问题是-更新c2是否意味着SQL Server必须更新IX_测试和实际数据行(聚集索引)?

聚集索引是表的一部分,因此它只是更新表本身。如果是非聚集索引,那么答案是肯定的

丛生 创建一个索引,其中键值的逻辑顺序决定表中相应行的物理顺序。聚集索引的底部或叶级包含表的实际数据行。允许表或视图一次使用一个聚集索引。有关详细信息,请参见聚集索引结构

//编辑: 我明白了,我从另一个角度理解了。要点是,如果更新列,则必须更新: 1) 聚集索引 2) 包含该列的所有非聚集索引


在设计db时,总是会有一个问题,需要创建什么/多少索引-这是读写速度(以及真正需要什么)之间的平衡。

是的,就像在索引中包含任何字段都会复制数据一样。当字段更改时,必须更新包含字段的所有索引

因此,当您扩展索引以覆盖一个查询(或多个查询)时,您是在复制数据。这总是一种交易