首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 索引維護實務:掃描密度檢查與 DBCC DBREINDEX 重建

     編輯:關於SqlServer

索引碎片會導致掃描密度下降,查詢效能惡化。本文提供標準維護流程:檢查掃描密度 → 重建叢集索引 → 必要時重建所有索引。

步驟 1:檢查掃描密度

DECLARE @table_id INT
SET @table_id = OBJECT_ID('您的表名')
DBCC SHOWCONTIG(@table_id)

關注輸出中的 Scan Density (掃描密度)。理想值為 100%。若顯著低於 100% (如 < 80%),表示存在嚴重碎片,需重建。

步驟 2:重建叢集索引 (通常為主鍵)

DBCC DBREINDEX('您的表名', 'PK_索引名', 100)
  • 第三個參數 100 為填滿因子,保留 100% 頁面填滿 (適合唯讀/少更新表);高更新頻率表建議 80-90。
  • 重建叢集索引會同時重建所有非叢集索引 (因書籤變更),通常足以解決大部分碎片問題。

步驟 3:驗證與必要時重建所有索引

-- 重新檢查
DBCC SHOWCONTIG(@table_id)

-- 若掃描密度仍未達標,重建所有索引
DBCC DBREINDEX('您的表名', '', 100)  -- 第二參數空字串表示所有索引

進階維護建議 (SQL Server 2005+)

  • 使用 sys.dm_db_index_physical_stats DMV 取得詳細碎片資訊 (avg_fragmentation_in_percent)。
  • 採用 ALTER INDEX ... REBUILD / REORGANIZE 線上/離線重建,支援資料分割、壓縮、MAXDOP 等選項。
  • 建立維護計畫 定期 (每週/每月) 自動檢查並重建碎片超標索引 (閾值建議:> 30% REBUILD, 5-30% REORGANIZE)。
  • DBCC DBREINDEX 於 SQL Server 2017 起標記棄用,新專案請改用 ALTER INDEX。

操作窗口與影響

  • 重建索引會持有架構修改鎖 (Sch-M),阻塞所有存取。大表建議在維護時段執行。
  • SQL Server Enterprise Edition 支援 ONLINE = ON 線上重建,大幅減少封鎖。
  • 重建後統計資訊自動更新,查詢計畫通常會改善。

定期監控掃描密度並重建索引,是維持 SQL Server 查詢效能穩定的核心運維工作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved