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语句