티스토리 뷰
반응형
Union vs Union All 차이
UNION: only keeps unique records
두 쿼리문의 결과에서 합집합을 구한다. (A∪B - A∩B)
UNION ALL: keeps all records, including duplicates
두 쿼리문의 결과에서 합집합을 구한다. 단, 중복되는 정보도 포함하여 출력한다. A∪B
처리 과정
- 최종 UNION [ALL | DISTINCT] 결과에 적합한 임시 테이블(Temporary table)을 메모리 테이블로 생성
- UNION 또는 UNION DISTINCT 의 경우, Temporary 테이블의 모든 컬럼으로 Unique Hash 인덱스 생성
- 서브쿼리1 실행 후 결과를 Temporary 테이블에 복사
- 서브쿼리2 실행 후 결과를 Temporary 테이블에 복사
- 만약 3,4번 과정에서 Temporary 테이블이 특정 사이즈 이상으로 커지면 Temporary 테이블을 Disk Temporary 테이블로 변경
**(이때 Unique Hash 인덱스는 Unique B-Tree 인덱스로 변경됨)**
- Temporary 테이블을 읽어서 Client에 결과 전송
- Temporary 테이블 삭제
차이점 && 성능
각 Union
의 차이는 중복제거를 위한 임시 테이블에 인덱스를 생성의 유무이다.
만일 처리중 데이터의 크기가 작아서 5번 과정을 거치지 않는다면
메모리 Temporary 테이블에 Hash 인덱스
를 사용하기 때문에 속도 차이가 발생한다.
그러나 테이블의 크기가 임시 테이블의 크기보다 커진다면 B-tree 인덱스 형태로 저장되기 때문에
처리 시간에 큰 차이가 발생하게된다.
즉, 쉽게 사용되는 Union
명령어는 상대적으로 좋지 못한 성능을 발생시키는 것이다.
중복을 처리하는 기준
완성된 두 테이블에서 중복을 제거하는 기준은 뭘까?
결과를 출력해본다면 모든 컬럼들 사이에는 어떠한 중복도 없는 것을 볼 수 있다.
** 즉, 모든 컬럼이 중복체크 대상이 되는 것이다. **
반응형
'DataBase' 카테고리의 다른 글
스핑크스 SQL의 특징과 문제점 (0) | 2022.10.18 |
---|---|
Common Table Expression (0) | 2022.09.17 |
DB 암호화 기법 (1) | 2022.09.16 |
제약조건 (CONSTRAINT) (0) | 2022.09.15 |
(N+1) Error (0) | 2022.02.26 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 그래프
- 스프링
- 릿코드
- 디자인패턴
- java
- Matlab
- 프로그래머스
- 수학
- interview
- OOP
- kakao
- 알고리즘
- JPA
- Solid
- C언어
- docker
- Algorithm
- spring-cloud
- 면접
- CS
- security
- nginx
- 스프링부트
- ajax
- 백준
- 매트랩
- springboot
- Spring
- 자바
- 자격증
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함