一尘不染

SQLServer CASE表达式-短路评估?

sql

我正在尝试优化执行以下操作的查询:

SELECT
   ...
   CASE WHEN (condition) THEN (expensive function call #1)
   ELSE (expensive function call #2) 
   END
...

该查询计划表明,即使在100%的行满足WHEN子句的情况下,也有相当多的时间花费在ELSE分支中对结果的调用上。

我能理解的唯一方法是假定SQLServer正在评估两个结果,然后仅基于对WHEN条件的评估来选择一个,但是我找不到关于CASE结果是否有任何确定的参考语句在条件语句之前进行评估。任何人都可以澄清或指向我参考吗?


阅读 132

收藏
2021-05-05

共1个答案

一尘不染

那是实际的还是估计的计划?Sql Server根据收集到的统计数据期望执行的计划来构建计划,而这并不总是与您为查询运行的一个实例发送给它的特定条件相对应。

2021-05-05