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

SQL Server-条件语句的查询执行计划,sql,sql-server,performance,sql-execution-plan,Sql,Sql Server,Performance,Sql Execution Plan,条件语句(如IF…ELSE)如何影响SQL Server(2005及以上版本)中的查询执行计划 条件语句是否会导致执行计划不佳?在考虑性能时,是否有任何形式的条件需要警惕 **编辑以添加**: 我特别指的是缓存查询执行计划。例如,在下面的实例中缓存查询执行计划时,是否为条件查询的每个结果缓存了两个执行计划 DECLARE @condition BIT IF @condition = 1 BEGIN SELECT * from ... END ELSE BEGIN SELECT

条件语句(如IF…ELSE)如何影响SQL Server(2005及以上版本)中的查询执行计划

条件语句是否会导致执行计划不佳?在考虑性能时,是否有任何形式的条件需要警惕

**编辑以添加**:

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

DECLARE @condition BIT

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

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

DECLARE @condition BIT

IF @condition = 1 
BEGIN 
 EXEC MyProc1
END 
ELSE 
BEGIN 
 EXEC MyProc2
END
这样,最终用户就不会有什么不同,MyProc1和MyProc2会得到他们自己的、正确的缓存执行计划。一个过程,一个查询。

@Meff(+1)是正确的。我以前的答案不是(所以我把它删掉了)。