Maison  >  Article  >  base de données  >  Introduction au code graphique et textuel de la technologie noire d'Union All utilisée dans MySQL5.7

Introduction au code graphique et textuel de la technologie noire d'Union All utilisée dans MySQL5.7

黄舟
黄舟original
2017-04-15 09:31:461619parcourir

Cet article vous guidera à travers 5 minutes pour comprendre la technologie noire de union toute utilisation dans MySQL5.7. Les amis dans le besoin peuvent se référer à

Performance de l'union tout sous MySQL5.6

Part1: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)
Cela peut être vu que dans MySQL5 Dans la version .6, le résultat de l'exécution est tel qu'indiqué dans la figure ci-dessous :

Introduction au code graphique et textuel de la technologie noire dUnion All utilisée dans MySQL5.7

À partir du plan d'exécution, les résultats de la

requête de la table helei et de la table t sont Les résultats de la requête sont fusionnés dans une table temporaire puis envoyés au client.

Performance de l'union sous 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)
On peut voir que dans la version MySQL5.7, le résultat de l'exécution est le suivant :


Introduction au code graphique et textuel de la technologie noire dUnion All utilisée dans 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)
On peut voir que dans MariaDB10.1, le résultat de l'exécution est le suivant :

Introduction au code graphique et textuel de la technologie noire dUnion All utilisée dans MySQL5.7

À en juger par les résultats de l'exécution, aucune table temporaire n'est créée ni dans MySQL5.7 ni dans MariaDB10.1. Dans l'ordre, les résultats de la requête de la table helei sont d'abord envoyés au client, puis les résultats de la requête de. la table t est envoyée au client.


L'optimisation dans cet article concerne uniquement l'union all et n'est pas valide pour l'union et l'utilisation de order by dans la couche la plus externe. Comme le montre la figure ci-dessous :

Introduction au code graphique et textuel de la technologie noire dUnion All utilisée dans MySQL5.7

- Résumé -

dans MySQL5.7/MariaDB10.1, union all ne crée plus de tables temporaires, ce qui réduira la surcharge d'E/S lors des

requêtes conjointes. Cette fonctionnalité n'est pas disponible dans MySQL5.5/5.6.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn