覆盖索引是否重复数据?

时间:2009-11-20 01:04:51

标签: sql-server-2008 covering-index

假设我们有这个索引

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

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

2 个答案:

答案 0 :(得分:1)

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

  

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

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

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

答案 1 :(得分:1)

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

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