与从Management Studio中的文本执行的相同查询相比,SQL Server存储过程运行时间(更长)

时间:2009-04-17 08:36:05

标签: sql-server sql-server-2005

所以这里有点奇怪...... 我有一个存储过程需要40秒才能运行。 我将存储过程的内容复制到新的查询窗口,更改2个输入参数(这两个日期),以便声明和设置它们,然后运行查询。它基本上是即时的,低于1秒执行。 唯一的区别是存储过程将2个日期作为参数。

任何人都知道会发生什么事情?

(我正在运行SQL Server 2005)

4 个答案:

答案 0 :(得分:13)

重新编译会嗅探参数,因此它没有任何区别。

This article explains my statement ...

  

...期间嗅探参数值   编译或重新编译...

您需要屏蔽参数:

ALTER PROCEDURE [uspFoo]
    @Date1 datetime,
    @Date2 datetime
AS
BEGIN
    DECLARE @IDate1 datetime, @IDate2 datetime;
    SELECT @IDate1 = @Date1, @IDate2 = @Date2;
    -- Stuff here that depends on @IDate1 and @IDate2
END

答案 1 :(得分:4)

正如gbn所说,这是一个参数嗅探问题。另一种建议是在查询结尾处包含以下行:

OPTION (RECOMPILE)

答案 2 :(得分:1)

运行探查器并捕获执行的查询计划。检查差异是什么 - 您可以调整查询或强制执行特定计划。

答案 3 :(得分:1)

我有一个类似的问题,发现它是由于我将参数设置为DATE但是在WHERE子句中与其进行比较的列是在DATETIME中引起的,所以就像SSMS正在为每个转换数据类型这是比较的行。如上所述,将参数数据类型更改为DATETIME或屏蔽参数可以解决问题。