MySQL5.7中如何進行優化union all,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

站在用戶的角度思考問題,與客戶深入溝通,找到公主嶺網站設計與公主嶺網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:網站設計制作、成都網站制作、企業官網、英文網站、手機端網站、網站推廣、主機域名、雅安服務器托管、企業郵箱。業務覆蓋公主嶺地區。
MySQL5.6中,使用union all相當于創建一張臨時表,這在執行大的聯合查詢時候會增加I/O開銷,降低查詢速度。
例如執行以下SQL語句:
(select id from accessLog order by id) union all (select id from access_test order by id);
在MySQL5.6環境:
點擊(此處)折疊或打開
mysql> select version();
| version() |
| 5.6.14-log |
1 row in set (0.00 sec)
mysql> explain (select id from accessLog order by id) union all (select id from access_test order by id);
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
| 1 | PRIMARY | accessLog | index | NULL | loginuserId | 9 | NULL | 535513 | Using index |
| 2 | UNION | access_test | index | NULL | idx_loginuid | 9 | NULL | 477248 | Using index |
| NULL | UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL | Using temporary |
可以看到執行計劃中提現到了創建的臨時表。
在MySQL5.7環境:
點擊(此處)折疊或打開
mysql> select version();
| version() |
| 5.7.18-log |
1 row in set (0.00 sec)
mysql> explain (select id from accessLog order by id) union all (select id from access_test order by id);
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| 1 | PRIMARY | accessLog | NULL | index | NULL | loginuserId | 9 | NULL | 586090 | 100.00 | Using index |
| 2 | UNION | access_test | NULL | ALL | NULL | NULL | NULL | NULL | 571023 | 100.00 | NULL |
整個查詢過程沒有創建臨時表,按照順序,accessLog表的查詢結果首先傳輸到客戶端,然后access_test表的查詢結果再傳輸到客戶端。
注意:此項優化對union和在最外層用order by無效,如下:
點擊(此處)折疊或打開
mysql> select version();
| version() |
| 5.7.18-log |
1 row in set (0.00 sec)
mysql> explain (select id from accessLog order by id) union all (select id from access_test order by id) order by id;
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| 1 | PRIMARY | accessLog | NULL | index | NULL | loginuserId | 9 | NULL | 586090 | 100.00 | Using index |
| 2 | UNION | access_test | NULL | ALL | NULL | NULL | NULL | NULL | 571023 | 100.00 | NULL |
| NULL | UNION RESULT | <union1,2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | NULL | Using temporary; Using filesort |
看完上述內容,你們掌握MySQL5.7中如何進行優化union all的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!
網站名稱:MySQL5.7中如何進行優化unionall
本文地址:http://www.yijiale78.com/article34/ghdepe.html
成都網站建設公司_創新互聯,為您提供虛擬主機、電子商務、品牌網站建設、網站排名、面包屑導航、定制網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯