ホームページ  >  記事  >  データベース  >  MySQL5.7でのユニオンオール使用のブラックテクノロジーのグラフィックとテキストコードの紹介

MySQL5.7でのユニオンオール使用のブラックテクノロジーのグラフィックとテキストコードの紹介

黄舟
黄舟オリジナル
2017-04-15 09:31:461651ブラウズ

この記事では、MySQL 5.7 での union all の使用法を 5 分間で理解することができます。必要な方は、MySQL5.6 での

union all のパフォーマンスを参照してください

パート 1。 : MySQL5.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)

MySQL5.6 バージョンでは、実行結果は以下のようになっていることがわかります:

MySQL5.7でのユニオンオール使用のブラックテクノロジーのグラフィックとテキストコードの紹介

実行計画から、helei テーブルの query 結果と、 t テーブルのクエリ結果は一時テーブルにマージされ、クライアントに出力されます。

MySQL5.7/MariaDB10.1 でのすべてのパフォーマンスを結合

Part1: MySQL5.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 &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; 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)

MySQL5.7 バージョンでは、実行結果が次のようになっていることがわかります。以下の図:

MySQL5.7でのユニオンオール使用のブラックテクノロジーのグラフィックとテキストコードの紹介

Part2:MariaDB10.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 &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; 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)

MariaDB10.1では、実行結果は以下のようになることがわかります:

MySQL5.7でのユニオンオール使用のブラックテクノロジーのグラフィックとテキストコードの紹介

実行結果から、 MySQL5.7 または MariaDB10.1 では一時テーブルを作成しません。順序に従って、heli テーブルのクエリ結果が最初にクライアントに出力され、次に t テーブルのクエリ結果がクライアントに出力されます。

この記事での最適化はunion allのみを対象としており、unionや最外層のorder byを使用した場合は無効です。以下の図に示すように:

MySQL5.7でのユニオンオール使用のブラックテクノロジーのグラフィックとテキストコードの紹介

——概要——

MySQL5.7/MariaDB10.1では、ユニオンオールは一時テーブルを作成しなくなり、ジョイントクエリ中のI/Oが削減されます。 O オーバーヘッド。この機能は MySQL5.5/5.6 では使用できません。

以上がMySQL5.7でのユニオンオール使用のブラックテクノロジーのグラフィックとテキストコードの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。