索引碎片過高會導致掃描效率下降。Oracle 風格的 ANALYZE INDEX ... VALIDATE STRUCTURE 產生 INDEX_STATS 視圖,依兩指標判斷:
SQL> ANALYZE INDEX IND_PK VALIDATE STRUCTURE;
SQL> SELECT name, height, del_lf_rows, lf_rows,
(del_lf_rows/lf_rows)*100 AS pct_deleted
FROM index_stats;
NAME HEIGHT DEL_LF_ROWS LF_ROWS PCT_DELETED
IND_PK 4 277353 990206 28.01
SQL> ALTER INDEX IND_PK REBUILD;
SQL Server 使用 sys.dm_db_index_physical_stats 檢視碎片:
SELECT
OBJECT_NAME(object_id) AS TableName,
index_id,
index_type_desc,
avg_fragmentation_in_percent,
page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 30 AND page_count > 1000;
avg_fragmentation_in_percent > 5% → ALTER INDEX ... REORGANIZE (線上、輕量)avg_fragmentation_in_percent > 30% → ALTER INDEX ... REBUILD (重建、可 ONLINE=ON Enterprise 版)建議: 納入定期維護計畫 (Ola Hallengren 腳本或維護計畫),依碎片率自動決定 REORGANIZE/REBUILD。