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