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

透過執行計畫優化 SQL:從入門到實戰的系統化方法論

     編輯:關於SqlServer

效能調校的正確心法

SQL 調校非單靠 DBA 事後補救,而應貫穿設計、開發、部署、維運全生命週期:

  • 設計階段:架構師規劃資料流、分區策略、索引初步設計。
  • 開發階段:開發人員撰寫可測試、可優化的 SQL,避免反模式。
  • 部署前:真實資料量壓測,驗證執行計畫符合預期。
  • 維運階段:持續監控、定期統計更新、計畫變更偵測。

執行計畫核心解讀指標

系統化優化流程

  1. 識別慢查詢:sys.dm_exec_query_stats、Query Store、Extended Events。
  2. 取得實際執行計畫:SSMS Ctrl+M、SET STATISTICS XML ON。
  3. 分析高成本運算子:關注 Estimated Subtree Cost 最高節點。
  4. 檢查索引建議:綠色提示的 Missing Index,但需人工評估寫入負擔。
  5. 改寫 SQL 或調整索引:消除掃描、Lookup、Sort、參數嗅探。
  6. 驗證成效:比較邏輯讀數、CPU、Duration、執行計畫形狀。
  7. 固定計畫(謹慎):Plan Guide、Query Store Force Plan。

常見反模式與修正

  • WHERE Col + '' = 'val'、WHERE YEAR(DateCol) = 2024 → 導致 Index Scan,改為 WHERE DateCol >= '2024-01-01' AND DateCol < '2025-01-01'。
  • SELECT * 造成 Covering Index 失效、Key Lookup → 明確列出欄位。
  • 隱含轉換(VARCHAR 比對 NVARCHAR) → 統一資料型別或顯式 CAST。
  • 過度使用標量函數 → 改為內嵌表值函數或直接展開邏輯。

結語

執行計畫是 SQL 引擎的「思維導圖」。熟練解讀並配合系統化流程,才能從根本解決效能瓶頸,而非頭痛醫頭。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
運算子/屬性關注意義優化方向
Table Scan / Clustered Index Scan全表掃描,無索引或索引未被使用建立合適索引、修正 SARGable 條件
Index Seek索引搜尋,高效率存取路徑確保求取欄位覆蓋於索引 (Covering Index)
Key Lookup (Bookmark Lookup)非叢集索引求取後,再回叢集索引取欄位加入 INCLUDE 欄位消除 Lookup
Sort排序操作,可能溢出 tempdb索引順序符合 ORDER BY、加大記憶體授予
Hash Match / Merge Join大資料集聯結方式確保聯結欄位有索引、統計資料最新
Parallelism (交叉圖示)平行查詢評估 MAXDOP 設定、查詢成本門檻
Estimated vs Actual Rows 差異大統計資料過期或參數嗅探UPDATE STATISTICS、OPTION (RECOMPILE)