删除存储过程非常慢,但是执行SQL很快问题分析

问题一:存储过程放在查询分析器中执行,大概耗时5秒左右即可成功执行,但是在网站中执行却会超时

1.    将该存储过程放到查询分析器中执行,大概耗时5秒左右即可成功执行,但是在网站中执行却会超时;

2.       经查阅资料,这里存储过程的执行计划是被缓存了,参数不同,还是按照老的执行计划查询,效率也会不同

3.       解决办法:

在存储过程的定义上,加上 WITH  RECOMPILE ,这样针对不同的类型查询,可以强制重新编译执行过程

这样每次执行存储过程的时候就会重新分析执行计划,提高效率;

 

问题二:直接在查询分析器中执行存储过程很慢,但是把存储过程中的内容拿出来执行很快

  1. 原因:存储过程的参数嗅探

2.      解决办法:

把存储过程的参数赋值给了存储过程中自定义的变量,整个存储过程中使用这个变量来代替参数,并且在参数赋值的地方加上OPTION (OPTIMIZE FOR UNKNOWN)

经过测试,存储过程执行时间和sql单独拿出执行时间一致;