1

假设我们有这个索引

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

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

4

2 回答 2

1

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

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

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

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

于 2009-11-20T01:21:43.117 回答
1

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

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

于 2009-11-20T01:27:14.947 回答