我有一个查询,我将存储过程.当我使用局部变量运行查询时,查询需要大约1秒才能运行.当我在存储过程中放入相同的查询并调用SP时,运行大约需要2分钟.
从之前的问题来看,我认为它可能与参数嗅探有关.当我在我的SP中声明局部变量然后在整个过程中使用局部变量之前我遇到过这个问题.这在过去有效,但在这种情况下似乎没有帮助我.
我现在有
CREATE PROCEDURE dbo.ProcedureName @DIV VARCHAR(4), @STD VARCHAR(1), -- S or N @scen varchar(20) AS BEGIN DECLARE @DIV_copy VARCHAR(4), @STD_copy VARCHAR(1), @scen_copy varchar(20); SELECT @DIV_copy = @DIV, @STD_copy = @STD, @scen_copy = @scen;
我也试过WITH RECOMPILE
像这样添加
CREATE PROCEDURE dbo.ProcedureName @DIV VARCHAR(4), @STD VARCHAR(1), -- S or N @scen varchar(20) WITH RECOMPILE AS BEGIN DECLARE @DIV_copy VARCHAR(4), @STD_copy VARCHAR(1), @scen_copy varchar(20); SELECT @DIV_copy = @DIV, @STD_copy = @STD, @scen_copy = @scen;
另外,我尝试OPTION(RECOMPILE)
在我的SP末尾添加如下:
SELECT * FROM #Output OPTION(RECOMPILE) END GO
我也试过用:
OPTION(OPTIMIZE FOR UNKNOWN )
以及:
OPTION(QUERYTRACEON 4136)
在此选项上,我没有适当的查询跟踪权限.
上面的5个修复程序似乎都没有解决问题,因为对于在存储过程外需要1或2秒的相同查询,存储过程仍然需要2分钟到2分30秒之间的任何时间.
这些修复都来自本文" 纠正SQL Server参数嗅探的不同方法 "
有没有人有类似的问题?感谢您的时间!
SQL Server 2008R2