You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

先union all再求和与先求和再union all,哪种SQL写法效率更高?

两种SQL统计写法的效率对比结论

你的判断完全正确,绝大多数场景下B方案执行效率远高于A方案,核心原因如下:

  • 中间结果集规模差异巨大
    A方案需要把table_a、table_b两张表的所有qty、price字段全部读取后合并,中间结果的行数等于两张表的行数之和,若单表数据量在百万级以上,中间结果会占用大量内存甚至触发磁盘临时表,产生极高的IO开销,后续还需要对全量行计算qty * price再做全局求和。
    B方案先对单表做聚合计算,每张表仅返回1行聚合结果,union all合并后的中间结果总共只有2行,外层sum仅需要对2行数据做加法即可完成统计,计算量和IO开销都可以忽略不计。
  • 可优化空间差异
    B方案的单表聚合逻辑可以被数据库优化器更好地适配:如果存在包含qty、price字段的覆盖索引,数据库可以直接扫描索引完成计算,不需要回表读取整行数据,进一步压缩执行耗时。

仅在极端特殊的情况下二者效率一致:就是你用的数据库优化器足够智能,能识别到A方案的逻辑可以等价改写为B方案的执行计划,但是目前MySQL、PostgreSQL、Oracle等主流数据库的优化器都不会做这个层级的聚合下推改写,所以生产环境优先选择B方案。

内容的提问来源于stack exchange,提问作者milop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:48:03