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

SQL Server 強制重新編譯預存程序:三種方法與適用場景

     編輯:關於SqlServer

當統計資料過期、索引新增、參數值分布傾斜 (Parameter Sniffing) 導致計畫不佳時,需強制重新編譯。

三種強制重新編譯方法

方法語法範圍適用場景
sp_recompileEXEC sp_recompile 'proc_name';整個預存程序下次執行前重新編譯一次,適合統計資料更新、索引新增後。
WITH RECOMPILE (建立時)CREATE PROC ... WITH RECOMPILE AS ...整個預存程序每次執行皆重新編譯,參數值差異極大、無法穩定計畫時。慎用,編譯開銷大。
OPTION (RECOMPILE) (查詢層級)SELECT ... FROM ... OPTION (RECOMPILE);單一查詢陳述式**SQL 2005+ 推薦**。僅重新編譯該陳述式,使用當前參數/區域變數值產生最佳計畫,不影響其他查詢。
執行時 WITH RECOMPILEEXEC proc_name ... WITH RECOMPILE;整個預存程序單次執行強制重新編譯,參數非典型或資料大幅變化時。

SQL 2005+ 陳述式級重新編譯優勢

  • 僅重新編譯導致重新編譯的陳述式,非整個程序。
  • 使用**當前執行時的參數值** (而非建立時值) 產生計畫,解決 Parameter Sniffing 問題。

注意事項

  • 若參考物件被刪除/重命名 → 執行時報錯;同名物件替換則無需重建程序。
  • 過度使用 WITH RECOMPILE 導致 CPU 壓力升高、計畫快取污染。
  • 優先考慮:更新統計資料 → sp_recompile → OPTION (RECOMPILE) → WITH RECOMPILE。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved