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)