我过去曾使用两种方法来解决参数嗅探问题:
1)使用WITH RECOMPILE
2)将参数值重新分配给局部变量,并使用这些值代替参数
据我了解,这两者的最终结果是相同的-创建并使用了针对当前查询/参数优化的新执行计划。
如果是这样,那么这两种方法之间是否存在任何区别,或者它们本质上是相同的?一个比另一个更好吗?
我过去曾使用两种方法来解决参数嗅探问题:
1)使用WITH RECOMPILE
2)将参数值重新分配给局部变量,并使用这些值代替参数
据我了解,这两者的最终结果是相同的-创建并使用了针对当前查询/参数优化的新执行计划。
如果是这样,那么这两种方法之间是否存在任何区别,或者它们本质上是相同的?一个比另一个更好吗?
Answers:
WITH RECOMPILE
这有点大锤。它重新编译模块中的每个语句。OPTION (RECOMPILE)
在对参数敏感的语句上使用是更有针对性的解决方案。
- 将参数值重新分配给局部变量,并使用这些值代替参数
这具有与OPTIMIZE FOR UNKNOWN
基于平均值生成计划相同的效果。该计划不会在每次执行时重新编译。
有关更多信息,请参见我的文章“ 参数嗅探,嵌入和RECOMPILE选项”。