【问题标题】:SQL Server - Query Execution Plan For Conditional StatementsSQL Server - 条件语句的查询执行计划
【发布时间】:2023-05-22 07:29:01
【问题描述】:

条件语句(如 IF ... ELSE)如何影响 SQL Server(2005 及更高版本)中的查询执行计划?

条件语句会导致糟糕的执行计划吗?在考虑性能时是否需要注意任何形式的条件?

** 编辑添加**:

我特指缓存的查询执行计划。例如,在下面的实例中缓存查询执行计划时,是否为条件的每个结果缓存了两个执行计划?

DECLARE @condition BIT

IF @condition = 1
BEGIN
    SELECT * from ...
END
ELSE
BEGIN
    SELECT * from ..
END

【问题讨论】:

    标签: sql sql-server performance sql-execution-plan


    【解决方案1】:

    您会经常使用这种方法重新编译计划。我通常会尝试将它们分开,因此您最终会得到:

    DECLARE @condition BIT
    
    IF @condition = 1 
    BEGIN 
     EXEC MyProc1
    END 
    ELSE 
    BEGIN 
     EXEC MyProc2
    END
    

    这样对最终用户没有任何影响,并且 MyProc1 和 2 获得了自己的、适当的缓存执行计划。一个过程,一个查询。

    【讨论】:

    • @Meff (+1) 是正确的。我之前的回答不是(所以我已经删除了)。
    最近更新 更多