2009-11-20 104 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什麼/多少索引創建時,一個問題 - 這是讀寫速度之間的平衡(以及真正需要的)。