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

SQL Server 索引重建與碎片整理:DBCC DBREINDEX 與 DBCC SHOWCONTIG 實戰

     編輯:關於SqlServer

索引碎片會嚴重拖慢查詢效能。本文解析索引 B-tree 結構、分頁分裂成因,並示範如何用 DBCC SHOWCONTIG 量化碎片程度,決定是否執行 DBCC DBREINDEX 重建索引。

索引架構與碎片成因

SQL Server 以 8KB 頁面儲存資料。叢集索引將資料依鍵值排序,形成雙向鏈結清單。插入資料導致頁面滿載時發生分頁分裂,約一半資料移至新頁,邏輯順序與物理順序不再一致,產生邏輯碎片。非叢集索引指向叢集索引鍵,同樣受碎片影響。

DBCC SHOWCONTIG 碎片分析

以 Employee 資料表為例:

USE database_name;
DECLARE @table_id INT = OBJECT_ID('Employee');
DBCC SHOWCONTIG(@table_id);

關鍵輸出指標:

  • Scan Density:最佳掃描計數與實際計數比率,< 100% 表示有碎片
  • Logical Scan Fragmentation:邏輯掃描中頁面順序不連續的比例,> 10% 建議重建
  • Extent Scan Fragmentation:區塊層級碎片
  • Avg. Page Density:頁面填滿度,過低表示空間浪費

範例輸出顯示 Logical Scan Fragmentation 0.56%、Scan Density 92%,屬輕度碎片,可考慮線上索引重組 (ALTER INDEX ... REORGANIZE) 而非離線重建。

DBCC DBREINDEX 重建索引

重建會重新建立索引 B-tree,消除碎片、更新統計資料、壓縮頁面。語法:

DBCC DBREINDEX ('Employee', '', 90); -- 90% fillfactor

注意:重建期間鎖定資料表 (企業版可指定 ONLINE=ON),應安排在維護時段。SQL Server 2005+ 建議改用 ALTER INDEX ... REBUILD,功能更完整且支援線上操作。

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