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

教你如何看懂 SQL Server 查詢執行計畫:從圖形解讀到統計資訊與視圖優化完整指南

     編輯:關於SqlServer

本文為 72072 的完整版重述,系統整理查詢執行計畫圖形解讀、運算子效能層級、三大 Join 策略、SET STATISTICS PROFILE 實際分析、統計資訊三區塊結構與自動維護、視圖優化內展機制,並附 MSDN 官方參考連結,打造最完整的執行計畫分析參考手冊。

一、圖形化執行計畫三大關鍵資訊

  1. 高成本步驟:右側運算子成本百分比最高,優化優先順序。
  2. 資料流量:連線粗細代表列數多寡,識別資料膨脹點。
  3. 運算子動作:Scan/Seek/Join 類型直接揭示存取路徑好壞。

二、資料存取運算子效能階梯

運算子本質效能優化對策
Table Scan掃描堆疊表全表最差建立叢集索引
Clustered Index Scan掃描叢集索引全表差建立非叢集索引轉 Seek
Index Scan掃描非叢集索引部分中縮小範圍或改 Seek
Index Seek非叢集索引定位 + Key Lookup良覆蓋索引移除 Lookup
Clustered Index Seek直接叢集索引定位最佳維護鍵值單調遞增

三、三大 Join 策略深度解析

Nested Loops Join

  • 外部小、內部大有索引 → 最快。
  • 偽碼:foreach outer: foreach inner: if match output
  • 變體:Naive / Index / Temporary Index。

Merge Join

  • 兩輸入大且已排序 (索引/排序) → 最快。
  • 雙指標同步推進,等值聯接。
  • 多對多需暫存表,唯一索引可避免。

Hash Join

  • 大量、未排序、無索引輸入 (中間結果) → 最適合。
  • Build (小表建雜湊) → Probe (大表探測)。
  • 類型:In-memory / Grace (分區) / Recursive (多層)。
  • 動態角色互換保護小表為 Build 端。

四、SET STATISTICS PROFILE 實際執行分析

SET STATISTICS PROFILE ON;
SELECT ... FROM ... WHERE ...;

輸出執行過程表格,關鍵欄位:

  • Rows:實際產生列數。
  • Executes:步驟執行次數。
  • StmtText:運算子詳細描述。
  • EstimateRows:優化器預估列數。

自內而外閱讀:最內層=資料存取,中間=Join/彙總,最外層=最終輸出。

五、統計資訊:優化器決策核心

DBCC SHOW_STATISTICS 三區塊

  1. 標頭:更新時間、列數、Steps (≤200)、Density、String Index。
  2. 密度向量:欄位前綴選擇性 (Density < 0.1 為高選擇性)。
  3. 直方圖:每階 RANGE_HI_KEY、RANGE_ROWS、EQ_ROWS、DISTINCT_RANGE_ROWS、AVG_RANGE_ROWS。

自動維護機制

  • AUTO_CREATE_STATISTICS ON:查詢無索引欄位自動建立。
  • AUTO_UPDATE_STATISTICS ON:~20% 資料變更觸發 (小表全掃描)。
  • AUTO_UPDATE_STATISTICS_ASYNC:非同步更新,查詢不等待但用舊統計。

統計過期導致計畫偏差

  • 實際 Rows vs EstimateRows 差距 > 10 倍 → 手動 UPDATE STATISTICS 或重建索引。
  • 重建索引同步全掃描更新統計,常解決突發效能問題。

六、視圖優化:內展機制

  • 視圖定義不直接執行,優化器將定義「內展」至外部查詢。
  • 同一視圖,不同 WHERE 條件 → 完全不同計畫。
  • 範例:OrdersView 無條件 → Clustered Index Scan;WHERE OrderId=1 → Clustered Index Seek。
  • 建議:視圖保持簡單,依實際查詢模式建索引。

推薦 MSDN 官方參考

精通執行計畫分析,是從「試錯調優」邁向「精準診斷」的關鍵里程碑。

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