CASE表达式中重复数学运算会重复执行吗?SQL是否缓存计算结果?
关于SQL中重复表达式计算的问题解答
首先明确:这个shipFuelSurcharge + shipCost的加法运算会不会被执行三次,完全看你用的数据库查询优化器。
- 绝大多数现代数据库(像MySQL、PostgreSQL、SQL Server这些)的优化器都够聪明,能识别出CASE语句里重复用了同一个表达式,只会计算一次结果然后复用,也就是你说的“缓存”这个值。
- 但也有例外:比如用的是很老的数据库版本,或者优化器被设置成低级别优化模式时,有可能真的重复计算三次。
要是你想彻底杜绝重复计算的可能,最稳妥的办法是提前把计算结果算出来,比如用子查询:
SELECT CASE WHEN total > 0 THEN 'over' WHEN total < 0 THEN 'under' ELSE 'equals' END AS ExampleMathCase FROM ( SELECT shipFuelSurcharge + shipCost AS total FROM shipment ) AS sub_query;
这样不管优化器啥情况,加法运算只执行一次,代码逻辑也更清楚。
内容的提问来源于stack exchange,提问作者p.Doug
相关产品推荐
相关产品推荐

