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

SQL Server 效能調優實戰筆記 (三):參數化與非參數化執行計畫的差異實測

     編輯:關於SqlServer

同一邏輯查詢,參數化 (sp_executesql) 與非參數化 (字串拼接) 產生截然不同的執行計畫與效能表現。

測試場景

  • 查詢主鍵 CWB_NO = '31301379874',其他條件皆為 NULL。
  • 參數化版本:透過 sp_executesql 傳遞 @CWB_NO 參數。
  • 非參數化版本:直接拼接字面值 '31301379874' 並將其他參數以 NULL 字面值嵌入 SQL 字串。

觀察結果

  • 參數化:最佳化器因未知具體值,依密度估算產生「保守」計畫(可能選擇索引掃描而非查找)。
  • 非參數化:最佳化器知曉確切字面值,利用直方圖統計資料精準估算,選擇最佳索引查找計畫。

啟示

  1. 參數化雖防注入、促進計畫重用,但對高選擇性、資料分佈傾斜的欄位可能產生次優計畫。
  2. 對此類查詢可考慮 OPTION (RECOMPILE) 讓參數化查詢亦能獲得字面值級估算。
  3. 或使用 最佳化提示 (如 OPTIMIZE FOR (@CWB_NO = '31301379874')) 引導估算。

結語

參數化與計畫重用是雙面刃。理解最佳化器在「已知字面值」與「未知參數」下的估算差異,針對關鍵查詢採取重編譯或提示策略,才能兼顧安全與效能。

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