1. 場景:
①存儲過程執行慢,但是存儲過程中拆出來的SQL語句執行並不慢。
②存儲過程執行慢,但是重新執行存儲過程(重新編譯存儲過程)后,存儲過程執行正常。
2. 解決方案:
在存儲過程中國對應的SQL語句后面使用OPTION (RECOMPILE) ,但是考慮此存儲過程調用頻繁,也可以使用 OPTION (OPTIMIZE FOR UNKNOWN)。
參考引用鏈接:https://www.cnblogs.com/kerrycode/p/9684192.html ;https://www.cnblogs.com/kerrycode/p/9650629.html;
對使用OPTION(RECOMPILE)還是OPTION (OPTIMIZE FOR UNKNOWN)感到困惑和極度難以取舍,后面總結了一下:
1:執行不頻繁的存儲過程,使用OPTION(RECOMPILE)要優先與OPTION (OPTIMIZE FOR UNKNOWN)
2:執行頻繁的存儲過程,使用OPTION (OPTIMIZE FOR UNKNOWN)要優先於OPTION(RECOMPILE)
3:數據分布傾斜的厲害的情況下,優先使用OPTION(RECOMPILE)
4: 使用OPTION (OPTIMIZE FOR UNKNOWN)會生成一個穩定、統一的執行計划,如果這個執行計划的效率基本能滿足用戶需求,那么優先使用OPTION (OPTIMIZE FOR UNKNOWN)
