SQL 存儲過程執行慢問題-參數嗅探問題


 

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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM