Azure-Sql-Database
除自動增量 ID 之外的欄位上的分群如何影響插入?
我有一個表,其中有一個自動遞增的 id 列,以及各種其他資訊列。行非常頻繁地插入到該表中。讀回數據時,大多數查詢按外鍵和日期範圍進行過濾。
目前,在 id 列上有一個聚集索引,在兩個重要列(TrackerId 和 DateRecorded)上有一個非聚集索引。如果我要交換索引,我們的查詢會執行得更快。這會對插入時間產生負面影響嗎?
在您的實際設計中,您有唯一的、靜態的、狹窄的、不斷增加的聚集索引鍵,當插入行時不會導致頁面拆分。
如果您在
TrackerId
and上創建聚集索引DateRecorded
(您想按此順序使用這些列,對嗎?因為您的搜尋謂詞具有相等 onTrackerId
和範圍 onDateRecorded
)您將獲得非增加的聚集鍵,這將導致頁面拆分 onINSERT
。它會更廣泛,也許不是獨一無二的。
但最終決定權在你。我們不知道這張表是否有更多的讀取或寫入,並且可以通過選擇適當
Fill Factor
且定期的索引重建來減輕頁面拆分。在這裡您可以閱讀更多資訊:Paul Randal 的減輕索引碎片