Learn the black technology of union all usage in MySQL 5.7 in 5 minutes

Learn the black technology of union all usage in MySQL 5.7 in 5 minutes

Performance of union all in MySQL 5.6

Part 1:MySQL 5.6.25

[root@HE1 ~]# MySQL -uroot -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.25-log MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select version();
+------------+
| version() |
+------------+
| 5.6.25-log |
+------------+
1 row in set (0.26 sec)
  
mysql> explain (select id from helei order by id) union all (select id from t where id=0 order by id);
+----+--------------+------------+-------+---------------+--------+---------+------+------+-----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------+------------+-------+---------------+--------+---------+------+------+-----------------+
| 1 | PRIMARY | helei | index | NULL | idx_c1 | 4 | NULL | 5219 | Using index |
| 2 | UNION | t | ALL | NULL | NULL | NULL | NULL | 1 | Using where |
| NULL | UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL | Using temporary |
+----+--------------+------------+-------+---------------+--------+---------+------+------+-----------------+
3 rows in set (0.00 sec)

It can be seen that in MySQL version 5.6, the execution results are as shown in the following figure:

wKioL1f8bZvhzEMaAAFulp6pefo997.jpg

From the execution plan, the query results of the helei table and the t table are merged into a temporary table and then output to the client.

Performance of union all in MySQL 5.7/MariaDB 10.1

Part 1:MySQL 5.7.15

[root@HE1 ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.15-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select version();
+------------+
| version() |
+------------+
| 5.7.15-log |
+------------+
1 row in set (0.00 sec),
mysql> explain (select id from helei order by id) union all (select id from t where id=0 order by id);
+----+-------------+-------+------------+-------+---------------+--------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+--------+---------+------+------+----------+-------------+
| 1 | PRIMARY | helei | NULL | index | NULL | idx_c1 | 4 | NULL | 5212 | 100.00 | Using index |
| 2 | UNION | t | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | Using where |
+----+-------------+-------+------------+-------+---------------+--------+---------+------+------+----------+-------------+
2 rows in set, 1 warning (0.00 sec)

It can be seen that in MySQL version 5.7, the execution results are as shown in the following figure:

wKiom1f8bijj3fJiAAF48HG3WPQ918.jpg

Part 2: MariaDB 10.1.16

[root@HE3 ~]# /usr/local/mariadb/bin/mysql -uroot -S /tmp/mariadb.sock 
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.1.16-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDB [helei]> explain (select id from helei order by id) union all (select id from t where id=0 order by id);
+------+-------------+-------+-------+---------------+--------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-------+-------+---------------+--------+---------+------+------+-------------+
| 1 | PRIMARY | helei | index | NULL | idx_c1 | 4 | NULL | 5198 | Using index |
| 2 | UNION | t | ALL | NULL | NULL | NULL | NULL | 1 | Using where |
+------+-------------+-------+-------+---------------+--------+---------+------+------+-------------+
2 rows in set (0.00 sec)

It can be seen that in MariaDB10.1, the execution results are shown in the following figure:

wKioL1f8bmmwi9GLAAFbMJCN0uU554.jpg

From the execution results, we can see that neither MySQL 5.7 nor MariaDB 10.1 creates a temporary table. In order, the query results of the helei table are output to the client first, and then the query results of the t table are output to the client.

The optimization in this article is only for union all and is not effective for union and order by in the outermost layer. As shown in the following figure:

wKiom1f8boazPx35AAKnKQS1Ig4776.jpg

--Summarize--

In MySQL 5.7/MariaDB 10.1, union all no longer creates temporary tables, which reduces I/O overhead during union queries. This feature is not available in MySQL 5.5/5.6.

The above is the black technology that I introduced to you in 5 minutes to understand the usage of union all in MySQL5.7. I hope it will be helpful to you. If you have any questions, please leave me a message and I will reply to you in time. I would also like to thank everyone for their support of the 123WORDPRESS.COM website!

You may also be interested in:
  • How to use union all in MySQL to get the union sort
  • Basic usage of UNION and UNION ALL in MySQL
  • Brief analysis of MySQL union and union all
  • Comparison of the efficiency of using or, in and union all in MySQL query commands
  • Introduction to the use of MySQL joint query UNION and UNION ALL
  • A brief understanding of the difference between MySQL union all and union

<<:  How to execute PHP scheduled tasks in CentOS7

>>:  Solution to the low writing efficiency of AIX mounted NFS

Recommend

20 Signposts on the Road to Becoming an Excellent UI (User Interface) Designer

Introduction: Interface designer Joshua Porter pub...

HTML meta usage examples

Example Usage Copy code The code is as follows: &l...

How to reduce the memory and CPU usage of web pages

<br />Some web pages may not look large but ...

Detailed explanation of the solution for migrating antd+react projects to vite

Antd+react+webpack is often the standard combinat...

Detailed explanation of Linux text editor Vim

Vim is a powerful full-screen text editor and the...

Docker installation rocketMQ tutorial (most detailed)

RocketMQ is a distributed, queue-based messaging ...

Detailed explanation of MySQL phantom reads and how to eliminate them

Table of contents Transaction Isolation Level Wha...

Achieve 3D flip effect with pure CSS3 in a few simple steps

As a required course for front-end developers, CS...

Introduction to JavaScript strict mode use strict

Table of contents 1. Overview 1.1 What is strict ...

How to automatically backup mysql remotely under Linux

Preface: Basically, whether it is for our own use...

MySQL explain obtains query instruction information principle and example

explain is used to obtain query execution plan in...

Linux system prohibits remote login command of root account

ps: Here is how to disable remote login of root a...