![]() |
1
1
SQL Server具有称为“参数嗅探”的功能。基本上,第一次运行SP时,创建的执行计划基于传递给该SP的值。使用相同的值再次运行该计划-速度很快,使用不同的值运行该计划。如果这些值对最初生成的执行计划“不利”,则速度可能会非常慢。 为了避免参数嗅探,可以在存储过程中为每个参数声明一个局部变量,并将参数分配给局部变量。然后在存储过程代码中,只使用变量,而不使用参数。这样,执行计划将不会基于第一次运行时使用的值。 如果你搜索“SQL参数嗅探”,你也可以找到很多关于这个主题的好文章。 |
![]() |
2
0
听起来执行计划不正常。你不必去重新制作它。您应该能够调用sp_recompile,并让它在下次执行时重新编译。当它这样做时,它将构建一个新的执行计划。我要检查的另一件事是,在调用sp_recompile之前,各种表上的统计信息都是最新的,并且是最新的。 |
![]() |
3
0
除了目前提供的答案之外,您的执行计划还将依赖数据库中的统计信息。如果这些不是最新的,那么执行计划就不能是最佳的。您可以使用以下方法来更新统计信息:
|
![]() |
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 7 年前 |
![]() |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
![]() |
hud · 执行存储过程会导致错误 9 年前 |
![]() |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |