图解 MySQL union 调优原理

|

通过使用union可以把两个查询结果合并起来,注意:

union all不会去除重复的行,union则会去除重复读的行。

1、union all

执行下面sql:

1
(select id from t30 order by id desc limit 10) union all (select c from t31 order by id desc limit 10)

该sql执行计划如下图:

image-20200621231412385

执行流程如下:

  1. 从t30表查询出结果,直接写出到net buffer,传回给客户端;
  2. 从331表查询出结果,直接写出到net buffer,传回给客户端。

image-20200621232801276

2、union

执行下面sql:

1
(select id from t30 order by id desc limit 10) union (select c from t31 order by id desc limit 10)

该sql执行计划如下图:

image-20200621233005902

执行流程如下:

  1. 从t30查询出记录,写入到临时表;
  2. 从t30查询出记录,写入临时表,在临时表中通过唯一索引去重;
  3. 把临时表的数据通过net buffer返回给客户端。

image-20200621233853780

References