参数嗅探解决方法

Abe*_*ler 8 sql-server parameter-sniffing

过去我使用过两种方法来解决参数嗅探问题:

1) 使用WITH RECOMPILE
2) 将参数值重新分配给局部变量并使用这些值代替参数

据我了解,这两者的最终结果是相同的 - 创建并使用针对当前查询/参数优化的新执行计划。

如果这是真的,这两种方法之间有什么区别吗,或者它们本质上是一样的?一个比另一个更可取吗?

Jon*_*des 3

如果您可以预期典型值,请在(重新)创建存储过程时使用这些值运行它。将根据这些值创建执行计划并存储以供将来使用。我的大多数存储过程.sql文件都以具有合理值的命令结尾EXEC,正是出于此目的(并识别代码中的基本错误)。

当然,如果您的存储过程运行时间非常长,以至于您无法在生产时间内合理地执行它,那么这将无济于事。请注意,仅仅启动作业是不够的,它必须成功完成才能存储计划。