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: 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: 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: 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: --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 execute PHP scheduled tasks in CentOS7
>>: Solution to the low writing efficiency of AIX mounted NFS
Introduction: Interface designer Joshua Porter pub...
Example Usage Copy code The code is as follows: &l...
This article shares the specific code of swiper+e...
<br />Some web pages may not look large but ...
Antd+react+webpack is often the standard combinat...
Vim is a powerful full-screen text editor and the...
RocketMQ is a distributed, queue-based messaging ...
Preface Recently, due to work reasons, I was work...
Table of contents Transaction Isolation Level Wha...
As a required course for front-end developers, CS...
Table of contents 1. Overview 1.1 What is strict ...
Preface: Basically, whether it is for our own use...
explain is used to obtain query execution plan in...
ps: Here is how to disable remote login of root a...
This article describes the Linux user and group c...