2009-11-20 68 views
1

假设我们有这个指标覆盖索引是否重复数据?

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

这是否意味着我们将有C2在这两个索引页与实际数据页?真正的问题是 - 更新c2是否意味着SQL Server将不得不更新IX_test和实际数据行(聚簇索引)?

回答

1

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

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

1

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

CLUSTERED 创建索引,其中键值的逻辑顺序决定表中相应行的物理顺序。聚集索引的底部或叶级别包含表的实际数据行。表或视图一次只允许一个聚簇索引。有关更多信息,请参阅Clustered Index Structures。

//编辑: 我看到我已经了解了另一种方式。问题的关键是,如果你更新一列,你必须更新: 1)聚集索引 2)包含该列的所有非聚集索引

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