部分重疊的索引下降?
我正在使用具有以下內容的 5000 萬行表:
- 聚集索引鍵$$ Col1 $$
- 非聚集索引鍵$$ Col1 $$,$$ Col2 $$(不包括)
似乎正確的電話是放棄#2並重建#1鍵
$$ Col1 $$,$$ Col2 $$. 聽起來對嗎?如果 NCI 仍然有,調整邏輯是否相同?$$ Col1 $$作為它的第一個鍵,然後是 7 個其他鍵(用 8 個鍵重建 CX)?
正如 Andrew Sayer 所暗示的,要考慮的一件事是您還有多少其他索引?…因為您的聚集索引的所有欄位也將自動包含在該表的任何非聚集索引中。這就是當需要未儲存在該非聚集索引中的附加欄位來滿足查詢時,非聚集索引能夠促進**鍵查找操作的方式。**因此,通常建議注意不要過度膨脹聚集索引。
考慮到這一點,對於您關於“似乎正確的選擇是放棄#2並重建#1”$$ Col1 $$,$$ Col2 $$",是的,大多數時候這可能是一個好主意(取決於 的數據類型和大小
Col2
),因為 上的非聚集索引(Col1, Col2)
是 的覆蓋索引Col1
。但是對於你的第二個問題“如果 NCI 仍然有,調整邏輯是否相同?$$ Col1 $$作為它的第一個鍵,然後是其他 7 個鍵?",雖然情況與覆蓋與聚集索引相同的欄位的非聚集索引相同,但聚集索引上的 8 個欄位對於聚集索引可能很重(再次取決於它們的數據類型和大小),尤其是如果您維護同一張表上還有大量其他非聚集索引。你很可能最終會消耗更多的空間,而不是這樣做節省的空間。
在任何一種情況下,它都將取決於數據類型和列的大小、表上的索引數量以及表的案例以及查詢方式。鑑於此,找出每種情況的最佳方法是使用兩種方式建構的索引測試您的案例,並比較性能結果。
我對所有索引都遵循的一般經驗法則是五乘五規則。我希望任何給定實體上的索引不超過五個,並且每個索引定義的列不超過五個。雖然這不是一個硬性規定,而且肯定有例外,但這只是我個人喜歡遵循的一般想法。