回答

收藏

SQLServer CASE表达式-短路评估?

技术问答 技术问答 175 人阅读 | 0 人回复 | 2023-09-13

我正在尝试优化执行以下操作的查询:0 ~1 _  r! f9 U. d" j2 L
SELECT7 p0 H/ ?3 a9 t7 r* n4 }
   ...$ U8 P5 j* T! G. d' v; I
   CASE WHEN (condition) THEN (expensive function call #1)
5 d7 M$ B# M% {( ]. {% M% Y! i- I   ELSE (expensive function call #2)
3 M& p& A& z" A9 ^" d( `, j( }   END
' O; ?2 B, d6 z+ n' E+ c1 g: ?...( g/ t, D0 g2 ?% `) n( ^
该查询计划表明,即使在100%的行满足WHEN子句的情况下,也有相当多的时间花费在ELSE分支中对结果的调用上。8 @3 Y" q2 V% @/ p  C# `
我能理解的唯一方法是假定SQLServer正在评估两个结果,然后仅基于对WHEN条件的评估来选择一个,但是我找不到关于CASE结果是否有任何确定的参考语句在条件语句之前进行评估。任何人都可以澄清或指向我参考吗?
/ H7 F! L" z6 b# q               
! P% d/ c0 t# r4 e$ L& f解决方案:. A7 c6 U3 r- |3 }& z" J& O( G* d
               
% A" i0 N1 q& x8 S% |% W8 P& E) u6 T
) Y) G5 F$ k; r, n* A6 F" q
                那是实际的还是估计的计划?Sql Server根据收集到的统计数据期望执行的计划来构建计划,而这并不总是与您为查询运行的一个实例发送给它的特定条件相对应。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则