如何在mysql中使用union all_mysql union all区别说明

7次阅读

UNION ALL 比 UNION 更快更直白,不自动去重和排序,要求各 SELECT 列数一致、类型兼容,列名以首个 SELECT 为准;适用于无重复、允许重复、大数据量或含 TEXT 字段的场景,需显式 ORDER BY 实现排序。

如何在 mysql 中使用 union all_mysql union all 区别说明

直接用 UNION ALL 就行,它比 UNION 更快、更直白,只要你不介意重复数据。

UNION ALL 的基本写法

语法和 UNION 完全一样,只是把 UNION 换成 UNION ALL

  • 每个 SELECT 的列数必须一致
  • 对应列的数据类型要兼容(比如都是字符串或都是数字)
  • 列名以第一个 SELECT 为准

示例:

SELECT id, name FROM users
UNION ALL
SELECT id, nickname FROM admins;

UNION 和 UNION ALL 的核心 区别

去重与否是唯一本质区别

  • UNION:合并后自动去重 + 默认按字段顺序隐式排序(MySQL 实现中会建临时表 + unordered_set 去重)
  • UNION ALL:原样拼接,不做任何去重或排序,直接返回所有行

这意味着:如果两个子查询结果里都有 (1, 'Alice'),UNION 只出现一次,UNION ALL 出现两次。

什么时候该选 UNION ALL

满足以下任一条件,就优先用 UNION ALL:

  • 你已确认各子查询结果之间没有重复(比如查的是不同状态的订单表)
  • 业务逻辑本身允许重复(如日志归集、多源埋点数据合并)
  • 数据量较大,对性能敏感(实测常快 30% 以上,尤其在千万级结果时)
  • 字段含 TEXT 类型——UNION 在某些 MySQL 版本中不支持 TEXT 列去重,而 UNION ALL 支持

一个小提醒

UNION ALL 不排序,所以如果你需要最终结果有序,必须显式加 ORDER BY,且只能写在最后:

SELECT id, name FROM users
UNION ALL
SELECT id, nickname FROM admins
ORDER BY id;

星耀云
版权声明:本站原创文章,由 星耀云 2026-01-04发表,共计768字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources