| 指標 | 含義 | 健康閾值 |
|---|---|---|
| Scan Density [Best:Actual] | 最佳/實際 Extent 切換次數比 | ≥ 95% (100% 為無碎片) |
| Logical Scan Fragmentation | 索引頁邏輯順序偏離百分比 | ≤ 10%(叢集索引更嚴格) |
| Extent Scan Fragmentation | 非連續 Extent 百分比 | 參考值,視磁碟子系統而定 |
| Avg. Page Density (full) | 頁面填滿度 | 依 Fill Factor 而定,通常 80-95% |
USE Northwind;
DECLARE @table_id INT = OBJECT_ID('Orders');
DBCC SHOWCONTIG(@table_id);
輸出 Scan Density 100% [3:3]、Logical Scan Fragmentation 0% 表示索引極佳;若 Best:Actual = 3:5 則需重建。
| 特性 | DBCC DBREINDEX | DBCC INDEXDEFRAG (SQL 2000) / ALTER INDEX REORGANIZE (2005+) |
|---|---|---|
| 操作模式 | 離線(鎖定資料表,Schema 修改鎖) | 線上(不阻塞查詢/修改) |
| 碎片清除徹底度 | 完全重建,碎片歸零,可調整 Fill Factor | 就地整理,碎片降低但不歸零 |
| 記錄檔空間 | 大(完整重建) | 小(分批提交) |
| 統計資料更新 | 自動更新(掃描全表) | 不更新,需另行 UPDATE STATISTICS |
| 適用場景 | 維護窗口、碎片嚴重 (>30%)、需調整 Fill Factor | 7x24 無維護窗口、碎片輕微 (10-30%) |
-- 重建指定叢集索引,Fill Factor 90%
DBCC DBREINDEX('Northwind.dbo.Orders', 'PK_Orders', 90);
-- 重建所有索引
DBCC DBREINDEX('Northwind.dbo.Orders', '', 90);
SQL 2005+ 推薦語法:
ALTER INDEX ALL ON dbo.Orders REBUILD WITH (FILLFACTOR = 90, ONLINE = ON); -- Enterprise 版支援 ONLINE
ALTER INDEX IX_Orders_CustID ON dbo.Orders REORGANIZE;
重建索引 / 重新組織索引 / 更新統計資料 任務。sys.dm_db_index_physical_stats (2005+) 定期掃描,碎片 > 30% 觸發重建。索引碎片是 SQL Server 效能隱形殺手。建立 「診斷 → 閾值判斷 → 選擇 REBUILD/REORGANIZE → 驗證」 閉環流程,配合適當 Fill Factor 與自動化排程,能持續保持索引健康,讓查詢計畫穩定高效運行。