假设我们有这个索引
CREATE INDEX IX_test ON t1(c1) INCLUDE (c2)
这是否意味着我们将在索引页面和实际数据页面中都有c2?真正的问题是 - 更新c2是否意味着SQL Server必须更新IX_test和实际数据行(聚集索引)?
答案 0 :(得分:1)
聚簇索引是表的一部分,所以它只是更新表本身。如果它是非聚集索引,那么答案就是肯定的。
CLUSTERED 创建一个索引,其中键值的逻辑顺序决定了表中相应行的物理顺序。聚簇索引的底层或叶级包含表的实际数据行。表或视图一次只允许一个聚簇索引。有关更多信息,请参阅聚簇索引结构。
//编辑: 我看到我已经以另一种方式理解了它。关键是,如果您更新列,则必须更新: 1)聚集索引 2)包含该列的所有非聚集索引
在设计数据库时需要设置什么/创建多少索引总是存在一个问题 - 这是读写速度(以及真正需要的)之间的平衡。
答案 1 :(得分:1)
是的,就像在索引中包含任何字段重复数据一样。当字段更改时,必须更新包含字段的所有索引(索引)。
因此,当您扩展索引以覆盖查询(或大于1)时,您正在复制数据。它始终是一种交易。