Abe*_*ler 8 sql-server parameter-sniffing
过去我使用过两种方法来解决参数嗅探问题:
1) 使用WITH RECOMPILE
2) 将参数值重新分配给局部变量并使用这些值代替参数
据我了解,这两者的最终结果是相同的 - 创建并使用针对当前查询/参数优化的新执行计划。
如果这是真的,这两种方法之间有什么区别吗,或者它们本质上是一样的?一个比另一个更可取吗?
如果您可以预期典型值,请在(重新)创建存储过程时使用这些值运行它。将根据这些值创建执行计划并存储以供将来使用。我的大多数存储过程.sql文件都以具有合理值的命令结尾EXEC,正是出于此目的(并识别代码中的基本错误)。
当然,如果您的存储过程运行时间非常长,以至于您无法在生产时间内合理地执行它,那么这将无济于事。请注意,仅仅启动作业是不够的,它必须成功完成才能存储计划。