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

Vue.js style layout Flutter business development common skills

Correspondence between flutter and css in shadow ...

Use jQuery to fix the invalid page anchor point problem under iframe

The application scenario is: the iframe page has n...

How to implement the webpage anti-copying function (with cracking method)

By right-clicking the source file, the following c...

Detailed explanation of the code for implementing linear gradients with CSS3

Preface The gradient of the old version of the br...

Nginx restricts IP access to certain pages

1. To prohibit all IP addresses from accessing th...

MySQL Series 3 Basics

Table of contents Tutorial Series 1. Introduction...

Detailed explanation of node.js installation and HbuilderX configuration

npm installation tutorial: 1. Download the Node.j...

Detailed explanation of the concept, principle and usage of MySQL triggers

This article uses examples to explain the concept...

Solve the problem of MySQL Threads_running surge and slow query

Table of contents background Problem Description ...