在SQL Server 2005中浏览缓存的计划

时间:2010-07-29 17:19:30

标签: sql-server sql-server-2005 query-optimization sql-execution-plan parameter-sniffing

有人可以解释为什么这样做。这是场景。我有一个存储过程,它开始运行缓慢。然后我选择一个参数并声明一个变量来保存它的值,并在proc中使用声明的变量而不是参数。然后,proc会大大加快。

我认为这与缓存的计划和统计数据有关,但我不确定。随着数据库的增长和变化,统计数据是否已经过时,以便在过去的数据状态上优化缓存计划,这与数据的当前状态不同?

感谢。

2 个答案:

答案 0 :(得分:4)

您所描述的内容通常被称为parameter sniffing,它似乎只是一个SQL Server问题 - 从未在Oracle IME上使用它,我也不知道MySQL上的问题。我给出的链接打破了这个问题。

请注意,优化程序使用的统计信息未与数据更改同步 - 您可能也需要偶尔运行UPDATE STATISTICS

答案 1 :(得分:0)

当您更改ddl时,存储过程执行计划将从缓存中删除,但OMG Ponies表示优化程序不会跟踪数据更改。

解决此问题的一种方法是使用With Recompile选项,每次运行时都会编译该过程。另一种可能的解决方案是定期运行sp_recompile,它标记了重新编译的存储过程。