티스토리 뷰
UNION 과 UNION ALL 의 사용법과 차이점
employees_1 테이블
employess_2 테이블
UNION (DISTINCT)
쿼리의 결과를 합친다. 중복된 ROW는 제거
employee_1 테이블과 employee_2 테이블 UNION 결과값
UNION ALL
모든 컬럼값이 같은 ROW도 결과로 보여준다. 중복제거 하지 않는다.
UNION ALL 이 중복제거하지 않으므로 UNION 보다 속도가 빠르다.
MySQL 의 내부적으로 UNION ALL 과 UNION 을 처리하는 과정
1. 최종 UNION [ALL | DISTINCT] 결과에 적합한 임시 테이블을 메모리 테이블로 생성
2. UNION 또는 UNION DISTINCT 의 경우, 임시 테이블의 모든 컬럼으로 Unique Hash 인덱스 생성
3. 서브쿼리 1실행 후 결과를 임시테이블에 복사
4. 서브쿼리 2 실행 후 결과를 임ㅅ테이블에 복사
5. 3,4 번 과정에서 임시 테이블이 특정 사이즈 이상으로 커지면 임시 테이블을 디스크 임시 테이블로 변경
6. 임시 테이블을 읽어서 클라이언트에 결과 전송
7. 임시 테이블 삭제
UNION 하는 컬럼들의 수가 많아지고 레코드의 사이즈가 커질수록 두 작업 모두에게 불리하겠지만,
UNION ALL 보다는 UNION에 더 악영향이 클 것이다.
1. UNION , UNION ALL 그리 좋은 SQL 작성은 아님. 모델링 차원에서 테이블을 통합하는게 좋음.
2. UNION 보다는 UNION ALL 을 사용하자. UNION 을 사용해야 한다면, 최소 필요 컬럼만 SELECT 하자 .
Refence
'Data Enginnering > Mysql' 카테고리의 다른 글
MySQL - mysqldump (0) | 2020.12.26 |
---|---|
MySQL - DB Monitoring ( pmm ) 구축 (1) | 2020.12.21 |
MySQL - 프로세스 리스트 (0) | 2020.11.20 |
MySQL 레플리케이션 상태 확인 (0) | 2020.09.27 |
MySQL- 실행 계획 분석 시 주의사항 (0) | 2020.07.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- spark
- BigData
- logstash
- 엘라스틱서치
- 리눅스
- 로그
- network
- docker
- 도커
- nginx
- 네트워크
- SWIFT
- flask
- pytest
- MYSQL
- ios
- linux
- SQL
- python
- WEB
- ElasticSearch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함