主頁 > 知識庫 > 5分鐘了解MySQL5.7中union all用法的黑科技

5分鐘了解MySQL5.7中union all用法的黑科技

熱門標(biāo)簽:電銷機器人說明書 安國在哪里辦理400電話 昆明智能外呼系統(tǒng)中心 智能電銷機器人靠譜么 地圖標(biāo)注培訓(xùn) 長安區(qū)違法建房地圖標(biāo)注 手機用地圖標(biāo)注工具 南宋地圖標(biāo)注黃河華山 電銷機器人公眾號推送

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í)行計劃來看,是把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中則不具備這一特性。

以上所述是小編給大家介紹的5分鐘了解MySQL5.7中union all用法的黑科技,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • MySQL如何使用union all獲得并集排序
  • MySQL中UNION與UNION ALL的基本使用方法
  • 淺析mysql union和union all
  • MySQL中使用or、in與union all在查詢命令下的效率對比
  • Mysql聯(lián)合查詢UNION和UNION ALL的使用介紹
  • 簡單了解MySQL union all與union的區(qū)別

標(biāo)簽:潛江 東莞 江門 長沙 合肥 吉安 南昌 武漢

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《5分鐘了解MySQL5.7中union all用法的黑科技》,本文關(guān)鍵詞  5分鐘,了解,MySQL5.7,中,union,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《5分鐘了解MySQL5.7中union all用法的黑科技》相關(guān)的同類信息!
  • 本頁收集關(guān)于5分鐘了解MySQL5.7中union all用法的黑科技的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章