除代码风格外,是否有理由偏好简单CASE WHEN而非搜索式CASE WHEN?
两种CASE写法的性能与功能对比
首先得提个关键问题:你写的第一种写法逻辑有问题——CASE [FOO] WHEN NULL THEN 'NO' 这个分支永远不会生效。因为SQL里NULL和任何值做等值比较的结果都是未知的,这种简洁版CASE是靠等值匹配来判断分支的,所以根本匹配不到NULL值。要是想让第一种写法能处理NULL,得改成这样:
CASE WHEN [FOO] = 1 THEN 'YES' WHEN [FOO] = 0 THEN 'NO' WHEN [FOO] IS NULL THEN 'NO' END
在修正逻辑错误之后,再看性能层面:
- 主流数据库(比如MySQL、SQL Server、PostgreSQL)的优化器会把这两种正确的写法解析成完全等价的执行逻辑,生成的执行计划几乎没差别,性能上不会有明显差距。
- 两种写法都是按顺序判断条件,优化器会根据
FOO字段有没有索引这些情况选最优路径,不会因为写法不同影响性能。
总结来说,先确保逻辑正确是前提,性能上两者没区别,选哪种主要看代码风格喜好。
内容的提问来源于stack exchange,提问作者J. Mini
相关产品推荐
相关产品推荐

