You need to enable JavaScript to run this app. MySQL中为什么UNION ALL查询的EXPLAIN结果不出现UNION RESULT?
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中为什么UNION ALL查询的EXPLAIN结果不出现UNION RESULT?

UNION与UNION ALL执行计划差异的原因

两类UNION查询的本质功能区别

  • UNION ALL 实现的是无加工流式拼接:执行完t1的全量扫描、t2的全量扫描后,直接把两个结果集按顺序返回给客户端,全程不做重复行剔除,不需要额外的结果整合环节。
  • 普通UNION(等价于UNION DISTINCT)实现的是去重后整合:收集两个子查询的结果后,必须剔除内容完全重复的行,再把最终结果返回。

UNION RESULT节点的定位

UNION RESULT 是MySQL中专门用于多子查询结果整合的虚拟执行节点,不对应任何物理表的扫描操作,核心职责是承接所有UNION分支的输出,完成去重计算后再返回结果:

  • 对于普通UNION:必须要走结果收集、去重的流程,因此一定会生成UNION RESULT行,对应执行计划里Using temporary的提示,就是该节点用来做去重的内部临时表开销。哪怕最终结果集里没有重复行,只要SQL写的是不带ALL的UNION,这个环节就不会被跳过。
  • 对于UNION ALL:因为不需要执行去重逻辑,两个分支的结果可以流式直接返回给客户端,没有额外的中间整合步骤,自然不会生成对应的UNION RESULT节点。

结合当前测试场景的验证

当前测试数据中,t1和t2各有1条content字段不同的记录:

  • UNION ALL的执行流程就是扫描t1取1行、扫描t2取1行,直接把2行结果返回,没有中间处理,因此执行计划只有两个表扫描的行。
  • 普通UNION虽然最终也会返回2行(因为没有重复行可剔除),但因为语法层面要求必须做去重检查,MySQL还是会创建临时表、生成UNION RESULT节点完成去重流程,哪怕最终没有删除任何一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 21:57:01