Sql-Server

是否有任何理由在聚集索引中只有 1 頁的表上有非聚集索引?

  • December 1, 2020

我在 SQL Server 中有一個小但積極查詢的表,其中有 94 行經常讀取和/或更新。聚集索引安全地適合 1 個 8KB 頁面,並且該頁面上有大量空白空間。這使我相信任何未來的更新都不會將其推到第二頁。

除了聚集索引之外,多年來還添加了幾個非聚集索引。

我的問題是,在概念層面上,**非聚集索引能否提高 SELECT 性能?**如果 SQL Server 一次不能讀取少於 1 個數據頁,那麼任何非聚集索引讀取都可以通過讀取聚集索引的單個頁面來輕鬆滿足,還是我誤解了這個概念?

我不想包含表定義,但以下是該表上 sp_BlitzIndex 的一些統計數據,顯示了它的用途:

ClusteredIndex      Reads: 1 (1 scan) Writes:180,544,146
Nonclustered Index  Reads: 0 Writes:103
Nonclustered Index  Reads: 63,425,182 (57,447,576 seek 5,977,606 scan) Writes:180,544,146
Nonclustered Index  Reads: 150,953,542 (150,953,542 seek) Writes:180,233,055
Nonclustered Index  Reads: 0 Writes:311,091

聚集索引似乎沒有被讀取,但我認為它可以沒有其他索引。更有趣的細節是,sp_BlitzLock 顯示了這個數據庫中的 39 個死鎖,所有 39 個死鎖都涉及這個小表,我覺得這很有趣。

非聚集索引是否重要?

是的。您有該表的多個副本(或它的子集),並且必須在所有副本之間協調更新。非聚集索引可能不會提高查詢性能,但它們可能是導致死鎖的原因。

但是對於 SELECT 查詢性能,非聚集索引應該沒有幫助。

引用自:https://dba.stackexchange.com/questions/280660