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

SQL Server 缺失索引建議分析:依據 DMV 統計精準建立高效益索引

     編輯:關於SqlServer

盲目建立索引會增加寫入負擔與空間浪費。利用 sys.dm_db_missing_index_* 系列 DMV,依據查詢優化器記錄的缺失索引建議,結合成本降低幅度與編譯次數,科學決定索引建立優先順序。

核心查詢

SELECT 
    c.name AS 資料庫名,
    c.equality_columns, c.inequality_columns, c.included_columns,
    c.statement AS 表名,
    c.avg_total_user_cost AS 平均成本降低,
    c.avg_user_impact AS 百分比收益,
    c.last_user_seek AS 最後尋找時間,
    c.unique_compiles AS 編譯次數
FROM (
    SELECT a.name, b.*
    FROM (
        SELECT d.*, s.avg_total_user_cost, s.avg_user_impact, s.last_user_seek, s.unique_compiles
        FROM sys.dm_db_missing_index_group_stats s
        JOIN sys.dm_db_missing_index_groups g ON s.group_handle = g.index_group_handle
        JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle
    ) b
    JOIN sys.databases a ON a.database_id = b.database_id
) c
ORDER BY 百分比收益 DESC, 編譯次數 DESC;

欄位決策指南

DMV 欄位含義決策參考
equality_columnsWHERE/JOIN 等值比較欄位建議放入索引鍵欄位前段
inequality_columns範圍比較欄位 (> < >= <=)建議放入索引鍵欄位後段
included_columnsSELECT/覆蓋查詢所需欄位放入 INCLUDE 非鍵欄位
avg_user_impact預估查詢成本降低百分比> 50% 高優先,> 80% 必建
unique_compiles受益查詢編譯次數次數高表示頻繁執行,優先級提升

注意事項

  • DMV 內容隨服務重啟重置,建議定期匯出歷史累積分析。
  • 需結合實際執行計畫與業務查詢模式驗證,避免過度索引。
  • 大表建索引建議在低峰期使用 ONLINE = ON。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved