5 분 동안 MySQL 5.7 에서 유 니 온 all 용법 을 알 아 보 는 블랙 테 크 놀 로 지
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 버 전에 서 실행 결 과 는 다음 과 같다.실행 계획 을 보면 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 버 전에 서 실행 결 과 는 다음 과 같다.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 에서 실행 결 과 는 다음 그림 과 같다.실행 결 과 를 보면 MySQL 5.7 이 든 MariaDB 10.1 이 든 임시 표를 만 들 지 않 았 습 니 다.순서대로 helei 표 의 조회 결 과 는 클 라 이언 트 에 먼저 출력 한 다음 에 t 표 의 조회 결 과 를 클 라 이언 트 에 출력 합 니 다.
본 논문 의 최 적 화 는 유 니 온 all 에 만 적용 되 며,유 니 온 과 최 외층 에서 orderby 를 사용 하 는 것 은 무효 입 니 다.아래 그림 에서 보 듯 이:
총 결
MySQL 5.7/MariaDB 10.1 에서 유 니 온 all 은 임시 표를 만 들 지 않 습 니 다.이렇게 하면 공동 조회 시 I/O 비용 을 줄 이 고 MySQL 5.5/5.6 에 서 는 이러한 특성 을 가지 지 않 습 니 다.
위 에서 말 한 것 은 소 편 이 소개 한 5 분 동안 MySQL 5.7 에서 유 니 온 all 용법 을 알 아 보 는 블랙 테 크 놀 로 지 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.