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