索引碎片會導致掃描密度下降,查詢效能惡化。本文提供標準維護流程:檢查掃描密度 → 重建叢集索引 → 必要時重建所有索引。
DECLARE @table_id INT
SET @table_id = OBJECT_ID('您的表名')
DBCC SHOWCONTIG(@table_id)
關注輸出中的 Scan Density (掃描密度)。理想值為 100%。若顯著低於 100% (如 < 80%),表示存在嚴重碎片,需重建。
DBCC DBREINDEX('您的表名', 'PK_索引名', 100)
100 為填滿因子,保留 100% 頁面填滿 (適合唯讀/少更新表);高更新頻率表建議 80-90。-- 重新檢查
DBCC SHOWCONTIG(@table_id)
-- 若掃描密度仍未達標,重建所有索引
DBCC DBREINDEX('您的表名', '', 100) -- 第二參數空字串表示所有索引
sys.dm_db_index_physical_stats DMV 取得詳細碎片資訊 (avg_fragmentation_in_percent)。ALTER INDEX ... REBUILD / REORGANIZE 線上/離線重建,支援資料分割、壓縮、MAXDOP 等選項。DBCC DBREINDEX 於 SQL Server 2017 起標記棄用,新專案請改用 ALTER INDEX。ONLINE = ON 線上重建,大幅減少封鎖。定期監控掃描密度並重建索引,是維持 SQL Server 查詢效能穩定的核心運維工作。