SQL Server - 条件语句的查询执行计划

Posted

技术标签:

【中文标题】SQL Server - 条件语句的查询执行计划【英文标题】:SQL Server - Query Execution Plan For Conditional Statements 【发布时间】:2008-11-14 09:38:25 【问题描述】:

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

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

** 编辑添加**:

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

DECLARE @condition BIT

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

【问题讨论】:

【参考方案1】:

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

DECLARE @condition BIT

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

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

【讨论】:

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

以上是关于SQL Server - 条件语句的查询执行计划的主要内容,如果未能解决你的问题,请参考以下文章

在SQL SERVER中查询数据库中第几条至第几条之间的数据SQL语句怎么写

Sql Server 优化 SQL 查询:如何写出高性能SQL语句

SQL Server 获取解析的查询

Sql Server中执行计划的缓存机制

SQL Server查询优化器执行计划“语句提前终止的原因:超时”

sql执行计划