5 분 동안 MySQL 5.7 에서 유 니 온 all 용법 을 알 아 보 는 블랙 테 크 놀 로 지

6000 단어 mysqlunionall
union all 의 MySQL 5.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)
이 를 통 해 알 수 있 듯 이 MySQL 5.6 버 전에 서 실행 결 과 는 다음 과 같다.
wKioL1f8bZvhzEMaAAFulp6pefo997.jpg
실행 계획 을 보면 helei 표 의 조회 결과 와 t 표 의 조회 결 과 를 임시 표 에 합 친 다음 클 라 이언 트 에 출력 합 니 다.
union all 이 MySQL 5.7/MariaDB 10.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 '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)
이 를 통 해 알 수 있 듯 이 MySQL 5.7 버 전에 서 실행 결 과 는 다음 과 같다.
wKiom1f8bijj3fJiAAF48HG3WPQ918.jpg
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)
MariaDB 10.1 에서 실행 결 과 는 다음 그림 과 같다.
wKioL1f8bmmwi9GLAAFbMJCN0uU554.jpg
실행 결 과 를 보면 MySQL 5.7 이 든 MariaDB 10.1 이 든 임시 표를 만 들 지 않 았 습 니 다.순서대로 helei 표 의 조회 결 과 는 클 라 이언 트 에 먼저 출력 한 다음 에 t 표 의 조회 결 과 를 클 라 이언 트 에 출력 합 니 다.
본 논문 의 최 적 화 는 유 니 온 all 에 만 적용 되 며,유 니 온 과 최 외층 에서 orderby 를 사용 하 는 것 은 무효 입 니 다.아래 그림 에서 보 듯 이: 
wKiom1f8boazPx35AAKnKQS1Ig4776.jpg
총 결
MySQL 5.7/MariaDB 10.1 에서 유 니 온 all 은 임시 표를 만 들 지 않 습 니 다.이렇게 하면 공동 조회 시 I/O 비용 을 줄 이 고 MySQL 5.5/5.6 에 서 는 이러한 특성 을 가지 지 않 습 니 다.
위 에서 말 한 것 은 소 편 이 소개 한 5 분 동안 MySQL 5.7 에서 유 니 온 all 용법 을 알 아 보 는 블랙 테 크 놀 로 지 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기