濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 5分鐘了解MySQL5.7中union all用法的黑科技

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

熱門標(biāo)簽:電銷機(jī)器人說(shuō)明書 安國(guó)在哪里辦理400電話 昆明智能外呼系統(tǒng)中心 智能電銷機(jī)器人靠譜么 地圖標(biāo)注培訓(xùn) 長(zhǎng)安區(qū)違法建房地圖標(biāo)注 手機(jī)用地圖標(biāo)注工具 南宋地圖標(biāo)注黃河華山 電銷機(jī)器人公眾號(hà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í)行計(jì)劃來(lái)看,是把helei表的查詢結(jié)果和t表的查詢結(jié)果合并在了一張臨時(shí)表里,然后輸出給客戶端。

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é)果看,無(wú)論是MySQL5.7還是MariaDB10.1,都沒有創(chuàng)建臨時(shí)表,按照順序,helei表的查詢結(jié)果首先輸出到客戶端,然后t表的查詢結(jié)果再輸出到客戶端。

本文中的優(yōu)化只針對(duì)union all,對(duì)union和在最外層使用order by無(wú)效。如下圖是所示: 


——總結(jié)——

在MySQL5.7/MariaDB10.1中,union all不再創(chuàng)建臨時(shí)表,這樣在聯(lián)合查詢時(shí)會(huì)減少I/O開銷,在MySQL5.5/5.6中則不具備這一特性。

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《5分鐘了解MySQL5.7中union all用法的黑科技》,本文關(guān)鍵詞  5分鐘,了解,MySQL5.7,中,union,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《5分鐘了解MySQL5.7中union all用法的黑科技》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于5分鐘了解MySQL5.7中union all用法的黑科技的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    兴仁县| 色达县| 清徐县| 安仁县| 阿克苏市| 博乐市| 彰化县| 封开县| 平阴县| 威信县| 临颍县| 慈溪市| 繁昌县| 察雅县| 台安县| 花莲市| 安陆市| 平顺县| 弋阳县| 通道| 甘泉县| 南乐县| 宜春市| 祁阳县| 红安县| 茌平县| 正阳县| 云梦县| 黑水县| 若尔盖县| 大同县| 陈巴尔虎旗| 乾安县| 怀来县| 巴中市| 元谋县| 通城县| 宣化县| 金华市| 临清市| 广汉市|