透過 DBCC SHOWCONTIG 分析資料表索引碎片程度,判斷是否需要重建。本文實測某資料表重建前後的關鍵指標變化,展示索引維護效果。
DBCC SHOWCONTIG('TableName');
/*
掃描頁數..............................: 228
掃描區數..............................: 52
區切換次數............................: 225
每區平均頁數..........................: 4.4
掃描密度 [最佳:實際]................: 12.83% [29:226]
邏輯掃描碎片..........................: 97.37%
區掃描碎片............................: 98.08%
每頁平均可用位元組....................: 2686.3
平均頁密度(滿).......................: 66.81%
*/
DBCC DBREINDEX('TableName');
-- 或現代語法 (SQL 2005+)
ALTER INDEX ALL ON TableName REBUILD;
DBCC SHOWCONTIG('TableName');
/*
掃描頁數..............................: 154
掃描區數..............................: 20
區切換次數............................: 19
每區平均頁數..........................: 7.7
掃描密度 [最佳:實際]................: 100.00% [20:20]
邏輯掃描碎片..........................: 0.00%
區掃描碎片............................: 55.00%
每頁平均可用位元組....................: 86.8
平均頁密度(滿).......................: 98.93%
*/
| 指標 | 重建前 | 重建後 | 判讀 |
|---|---|---|---|
| 掃描密度 | 12.83% | 100% | 越接近 100% 越好,表示資料連續儲存 |
| 邏輯掃描碎片 | 97.37% | 0% | 頁面順序與邏輯順序不一致程度,< 10% 為佳 |
| 區掃描碎片 | 98.08% | 55% | 區塊層級碎片,重建後仍存留因混合區分配造成 |
| 平均頁密度 | 66.81% | 98.93% | 頁面填滿度,越高空間利用率越好 |
| 每頁平均可用位元組 | 2686 | 87 | 頁面剩餘空間,過大表示浪費空間且增加 I/O |
ALTER INDEX REBUILD 或 REORGANIZE。WITH (ONLINE = ON),不鎖定資料表,適合高可用環境。FILLFACTOR = 80-90,預留空間減少分頁分裂。REORGANIZE,需額外執行 UPDATE STATISTICS。