MySQL5.7中union all用法的黑科技的圖文代碼說明
發(fā)表時間:2023-09-01 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]本文帶領(lǐng)大家通過5分鐘了解MySQL5.7中union all用法的黑科技,需要的朋友可以參考下union all在MySQL5.6下的表現(xiàn)Part1:MySQL5.6.25[root@HE1 ~]# MySQL -uroot -pEnter password: Welcome to the My...
本文帶領(lǐng)大家通過5分鐘了解
MySQL5.7中
union all用法的黑科技,需要的朋友可以參考下
union all在MySQL5.6下的表現(xiàn)
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)
可以看出,在MySQL5.6版本中,執(zhí)行結(jié)果如下圖所示:
從執(zhí)行計(jì)劃來看,是把helei表的查詢結(jié)果和t表的查詢結(jié)果合并在了一張臨時表里,然后輸出給客戶端。
union all在MySQL5.7/MariaDB10.1下的表現(xiàn)
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 '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)
可以看出,在MySQL5.7版本中,執(zhí)行結(jié)果如下圖所示:
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 '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)
可以看出在MariaDB10.1中,執(zhí)行結(jié)果如下圖所示:
從執(zhí)行結(jié)果看,無論是MySQL5.7還是MariaDB10.1,都沒有創(chuàng)建臨時表,按照順序,helei表的查詢結(jié)果首先輸出到客戶端,然后t表的查詢結(jié)果再輸出到客戶端。
本文中的優(yōu)化只針對union all,對union和在最外層使用order by無效。如下圖是所示:
——總結(jié)——
在MySQL5.7/MariaDB10.1中,union all不再創(chuàng)建臨時表,這樣在聯(lián)合查詢時會減少I/O開銷,在MySQL5.5/5.6中則不具備這一特性。
以上就是MySQL5.7中union all用法的黑科技的圖文代碼介紹的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。