Sql개발자
Mysql - union, union all 차이
martinooo
2022. 12. 21. 11:57
🤷♂️ UNION AND UNION ALL 사용법 차이?
UNION이란?
union ( distinct ): 중복을 제거한다.
쿼리의 결과를 합친다. 중복된 row는 제거
UNION ALL 이란?
union all: 중복을 제거 하지 않는다.
쿼리의 결과를 합친다. 같은 ROW의 결과도 보여준다.
🤷♂️ UNION AND UNION ALL 개념?
UNION ALL 중복을 제거하지 않으므로 UNION보다 속도가 빠르다
MySQL의 내부적으로 UNION ALL과 UNION을 처리하는 과정
- 최종 UNION[ ALL | DISTINCT ] 결과에 적합한 임시 테이블을 메모리 테이블로 생성
- UNION 또는 UNION DISTINCT의 경우, 임시 테이블의 모든 컬럼으로 Unique Hash 인덱스 생성
- 쿼리 1실행 후 결과를 임시 테이블에 복사
- 쿼리 2실행 후 결과를 임시 테이블에 복사
- 3,4번 과정에서 임시 테이블이 특정 사이즈 이상으로 커지면 임시 테이블을 디스크 임시 테이블로 변경
- 임시 테이블을 읽어서 클라이언트에 결과 전송
- 임시 테이블 삭제
UNION 컬럼들의 수가 많아지고 레코드의 사이즈가 커질수록 두 작업 모두에게 불리하겠지만,
UNION ALL 보다는 UNION에 더 악영향이 클 것이다.
참고
- UNION, UNION ALL 좋은 SQL작성 방식은 아니다. 최대한 자제하는것이 좋다.
- UNION, UNION ALL을 사용하게 된다면 최소한의 필요 컬럼만 SELECT 하는것이 좋다.