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)

 

posted @ 2022-03-27 20:11  Mark.Yang  阅读(956)  评论(0)    收藏  举报