索引碎片是資料庫效能衰退的隱形殺手。本文提供標準化的兩階段索引維護流程,幫助 DBA 精準識別碎片並高效重建,恢復查詢效能。
使用 DBCC SHOWCONTIG 檢視指定資料表的掃描密度。理想值為 100%,低於 70% 建議維護,低於 50% 必須立即處理。
DECLARE @table_id INT;
SET @table_id = OBJECT_ID('目標資料表名');
DBCC SHOWCONTIG(@table_id);
關鍵指標解讀:
步驟 1:針對性重建叢集索引
DBCC DBREINDEX('目標資料表名', 'PK_索引名', 100);
填寫主鍵/叢集索引名稱,填充因子設 100%(唯讀/少更新表)或 80-90%(高頻更新表)。執行後再次執行階段一驗證。
步驟 2:全表索引重建(若步驟 1 效果不佳)
DBCC DBREINDEX('目標資料表名', '', 100);
留空索引名稱參數即重建該表所有索引。注意:重建過程會持有架構修改鎖,建議在維護窗口執行;企業版可加 ONLINE = ON 選項(需 SQL Server 2005+)實現線上重建。
「並不一定能達 100%。」——楊錚
高併發寫入環境下,填充因子 100% 可能導致頁面分裂頻發,反而增加碎片。建議根據更新頻率動態調整填充因子(70-90%),並配合定期統計更新(UPDATE STATISTICS)獲得最佳效果。
SQL Server 2005+ 推薦使用 ALTER INDEX ... REBUILD/REORGANIZE 取代 DBCC DBREINDEX,支援線上操作、資料壓縮、分區索引等進階特性,並整合於維護計畫精靈中實現自動化排程。