问题一:存储过程放在查询分析器中执行,大概耗时5秒左右即可成功执行,但是在网站中执行却会超时
1. 将该存储过程放到查询分析器中执行,大概耗时5秒左右即可成功执行,但是在网站中执行却会超时;
2. 经查阅资料,这里存储过程的执行计划是被缓存了,参数不同,还是按照老的执行计划查询,效率也会不同
3. 解决办法:
在存储过程的定义上,加上 WITH RECOMPILE ,这样针对不同的类型查询,可以强制重新编译执行过程
这样每次执行存储过程的时候就会重新分析执行计划,提高效率;
问题二:直接在查询分析器中执行存储过程很慢,但是把存储过程中的内容拿出来执行很快
1. 原因:存储过程的参数嗅探
2. 解决办法:
把存储过程的参数赋值给了存储过程中自定义的变量,整个存储过程中使用这个变量来代替参数,并且在参数赋值的地方加上OPTION (OPTIMIZE FOR UNKNOWN)
经过测试,存储过程执行时间和sql单独拿出执行时间一致;