SQL Server-条件语句的查询执行计划
条件语句(如IF…ELSE)如何影响SQL Server(2005及以上版本)中的查询执行计划 条件语句是否会导致执行计划不佳?在考虑性能时,是否有任何形式的条件需要警惕 **编辑以添加**: 我特别指的是缓存查询执行计划。例如,在下面的实例中缓存查询执行计划时,是否为条件查询的每个结果缓存了两个执行计划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
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)是正确的。我以前的答案不是(所以我把它删掉了)。