Sql server 导致性能问题的SQL Server局部变量
我会尽可能地简单。经过几个小时的调试,我发现了我的速度急剧下降的原因Sql server 导致性能问题的SQL Server局部变量,sql-server,local-variables,Sql Server,Local Variables,我会尽可能地简单。经过几个小时的调试,我发现了我的速度急剧下降的原因 DECLARE @Id INT = 9999 SELECT * FROM dbo.FN_Whatever(@Id, NULL, NULL) 执行时间:15分钟 SELECT * FROM dbo.FN_Whatever(9999, NULL, NULL) 执行时间:0秒 请帮助我理解这个令人沮丧的问题 下面是稍微简化的函数(私人公司代码,所以…) 查询的实际执行计划是否存在差异?发布Fn_后。。。第二个调用可能可以优
DECLARE @Id INT = 9999
SELECT *
FROM dbo.FN_Whatever(@Id, NULL, NULL)
执行时间:15分钟
SELECT *
FROM dbo.FN_Whatever(9999, NULL, NULL)
执行时间:0秒
请帮助我理解这个令人沮丧的问题
下面是稍微简化的函数(私人公司代码,所以…)
查询的实际执行计划是否存在差异?发布Fn_后。。。第二个调用可能可以优化,因为所有参数都是已知的。你有没有研究过参数嗅探?@CriticalError我以前遇到过这种问题,然后只是在其他参数中传输参数,然后在我的过程中使用它们来解决问题。但这是在我进入函数之前。。。。以前从未见过这样的情况。在做出半教育性猜测之前,需要先查看执行计划。查询的实际执行计划是否存在差异?发布Fn_什么的。。。第二个调用可能可以优化,因为所有参数都是已知的。你有没有研究过参数嗅探?@CriticalError我以前遇到过这种问题,然后只是在其他参数中传输参数,然后在我的过程中使用它们来解决问题。但这是在我进入函数之前。。。。以前从未见过这种情况。在做出半教育性猜测之前,需要先看看执行计划。
CREATE FUNCTION FN_Whatever
(@Id INT,
@V1 INT = NULL,
@V2 INT = NULL)
RETURNS TABLE
AS
RETURN
SELECT T1.Id, T1.Value
FROM Table T1
LEFT JOIN (SELECT X
FROM Table T2
WHERE Id = @Id
AND (@V1 IS NULL OR x = @V1)
AND (@V2 IS NULL OR y = @V2)
GROUP BY x, y, z) SH_List ON ...
JOIN
FN_2 (@Id, @V1) FN1 ON ...
WHERE
Id = @Id
AND (@V1 IS NULL OR x = @V1)
AND (@V2 IS NULL OR y = @V2)