Sql-Server

聚集索引查找和非聚集索引查找的區別

  • September 11, 2018

聚集索引 (CI) 查找和非聚集索引 (NCI) 查找有什麼區別?一個比另一個表現更好嗎?

我問這個的原因是因為我有一個包含 5000 萬行和 150 列的表。它有一個名為ID定義為聚集索引的列。上面還有一個具有相同索引鍵 ID 和七個include-d 列的 NCI。在我看來,NC 索引在這裡是重複的,可以安全地刪除。

所以我想要一些專家的意見/建議,如果它可以安全地丟棄還是應該保持完整?

具有與聚集索引相同的鍵 * 的非聚集索引可能仍然有用,因為非聚集索引通常更小且更密集。請記住,聚集索引包括所有行內數據,因此它通常是可能的最寬(最不密集)的索引。

  • 相同的鍵列,以相同的順序,以相同的方式排序(asc/desc)。

對於單例查找(使用相等謂詞到唯一索引的查找),主要區別是假定索引頁需要更大的機會來查找已在記憶體中的單個記錄。在所有條件相同的情況下,具有 100 頁的非聚集索引比儲存在 10,000 頁上的聚集索引更有機會。

對於除單例之外的任何其他類型的搜尋,也將有一個掃描組件。掃描部分也將受益於更高密度的非聚集索引(每頁更多行)。即使頁面必須來自持久儲存,讀取更少的頁面也會更快。

您應該檢查系統文件,詢問添加索引的人,和/或查找程式碼註釋以了解此索引存在的原因。您還需要仔細檢查完整的索引定義,包括壓縮,並查看索引維護腳本。擁有非聚集索引可能還有其他特殊原因(例如,能夠線上重建)。

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