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

SQL Server 索引優化核心技巧:從類型選擇到碎片維護全周期管理

     編輯:關於SqlServer

索引類型決策矩陣

場景推薦索引理由
高選擇性、順序訪問、範圍查詢、主鍵聚集索引物理順序存儲,避免書簽查找,範圍掃描極快
低選擇性、非順序訪問、精確查找、外鍵、頻繁更新列非聚集索引邏輯指針結構,單表最多 999 個 (SQL 2008+),維護開銷相對小

鐵律:每表僅能有一個聚集索引;主鍵默認建聚集索引 (可指定 NONCLUSTERED);外鍵列強烈建議建非聚集索引支援連接/級聯操作。

數據頁與填充因子

  • 索引創建時生成數據頁 (8KB),填充因子決定頁面初始填滿度 (0/100=默認填滿)
  • 插入/更新導致頁分裂 → 邏輯碎片 (頁順序錯亂) + 物理碎片 (頁密度降低)
  • 填充因子不可動態調整,需重建索引生效

碎片檢測與處理雙雄

命令模式阻塞適用場景
ALTER INDEX ... REORGANIZE在線 (Online)無 (短時鎖頁)碎片 10-30%、高併發不能停機、邏輯碎片主導
ALTER INDEX ... REBUILD [WITH (ONLINE=ON)]離線/在線離線=Schema鎖/在線=低鎖碎片 >30%、需更新統計、物理碎片嚴重、調整填充因子

舊版對應:DBCC INDEXDEFRAG ≈ REORGANIZE,DBCC DBREINDEX ≈ REBUILD。

統計信息:優化器的「眼睛」

  • 自動創建/更新 (AUTO_CREATE_STATISTICS / AUTO_UPDATE_STATISTICS 默認 ON)
  • 大表閾值:修改行數 > 500 + 20% 表大小觸發異步更新 (可改同步)
  • 手動干預:UPDATE STATISTICS table [index] WITH FULLSCAN、sp_updatestats
  • 檢視狀態:DBCC SHOW_STATISTICS、sys.dm_db_stats_properties

自動化維護:數據庫維護計劃

維護計劃向導 (SSMS) / T-SQL Agent 作業 / Ola Hallengren 腳本 (社區金標準) 執行:

  1. 完整性檢查 (CHECKDB)
  2. 索引重組/重建 (按碎片閾值動態選擇)
  3. 統計信息更新 (FULLSCAN/抽樣)
  4. 備份 (完整/差異/日誌) 並驗證
  5. 清理歷史記錄

排程建議:低峰期 (如 02:00-04:00),REBUILD 間隔視業務波動 (周/月),REORGANIZE 可日頻。

避坑指南

  • ❌ 對性別/狀態等低基數列建單列索引 → 掃描更優
  • ❌ 過度索引 → 寫入放大、優化器選擇困難、統計維護負擔
  • ❌ 忽略 included columns 覆蓋查詢 → 書簽查找殺手
  • ✅ 定期審查 sys.dm_db_index_usage_stats 刪除未用索引
  • ✅ 監控 sys.dm_db_missing_index_* 發現潛在索引
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved