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

SQL Server 效能調校實戰:從執行計畫入門到解讀

     編輯:關於SqlServer

執行計畫是 SQL Server 查詢優化器根據統計資料、索引結構與成本演算法生成的「行動路線圖」。掌握如何獲取、閱讀並解讀執行計畫,是 T-SQL 效能調校的核心技能。本文透過 AdventureWorks 範例資料庫,示範圖形化執行計畫的實戰操作與關鍵資訊解讀。

環境準備與權限設定

若要檢視執行計畫,登入帳戶需具備 SHOWPLAN 權限:

GRANT SHOWPLAN TO [username];

本文範例使用簡單查詢:SELECT * FROM [dbo].[DatabaseLog]; 並假設已安裝 SQL Server 2005 以上版本與 AdventureWorks 資料庫。

兩種執行計畫的差異

類型生成時機資料來源適用場景
估計執行計畫查詢執行前中繼資料、統計資料、成本模型快速評估查詢邏輯、索引缺失、基數估計偏差
實際執行計畫查詢執行後儲存引擎實際運行統計(實際資料列數、I/O、CPU、執行時間)精準診斷效能瓶頸、參數嗅探、統計資料過期

在 SSMS 中快速顯示執行計畫

  • 估計計畫: 工具列圖示 估計執行計畫圖示 或右鍵選單「顯示估計執行計畫」或 Ctrl + L
  • 實際計畫: 工具列圖示 包含實際執行計畫圖示 或右鍵選單「包含實際執行計畫」或 Ctrl + M 再執行查詢

圖形化執行計畫閱讀指南

  1. 閱讀順序: 從右下角開始,向左、向上追蹤(資料流向)。
  2. 圖示即操作: 每個圖示代表一個實體操作(如 Table Scan、Index Seek、Nested Loops)。
  3. 箭頭粗細: 代表資料列數量多寡,越粗表示資料量越大。
  4. 操作下方百分比: 估計計畫顯示該操作佔總估計成本比例;實際計畫則反映實際資源消耗分布。

滑鼠懸停工具提示:關鍵屬性解讀

將滑鼠移至操作圖示上,會彈出詳細屬性視窗。以下為核心欄位說明:

Table Scan / Index Scan 操作

Table Scan 工具提示範例
  • Estimated Subtree Cost: 從該操作到葉節點的累積估計成本,越大越值得優化。
  • Estimated Number of Rows: 優化器預估輸出資料列數,與 Actual Rows 差距大暗示統計資料過期。
  • Ordered: True 表示輸出已排序(可能因 ORDER BY 或索引順序),False 則需額外 Sort 操作。
  • Node ID: 執行順序編號,數字越小越早執行。

實戰觀察:加入 ORDER BY 的影響

原查詢:SELECT * FROM [dbo].[DatabaseLog]; → Table Scan 成本 100%,Ordered=False。

修改後:SELECT * FROM [dbo].[DatabaseLog] ORDER BY PostTime;

加入 ORDER BY 後的估計執行計畫

計畫出現 Sort 操作(成本 62%),且 Table Scan 變為 Ordered=True。這揭示:優化器為了滿足排序需求,可能選擇掃描後再排序,而非使用索引。若 PostTime 有索引,優化器應改走 Index Scan + Ordered=True,避免額外 Sort 成本。

下一步學習方向

  • 文字與 XML 格式執行計畫的深度分析
  • 常見操作符(Key Lookup、Hash Match、Parallelism)效能特徵
  • 參數嗅探、統計資料維護與計畫快取管理

掌握執行計畫解讀,就能從「猜測調優」轉向「精準診斷」,是每位 DBA 與開發者必備的核心能力。

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