UNION 과 UNION ALL 의 사용법과 차이점
employees_1 테이블
employess_2 테이블
1. UNION (DISTINCT) - 중복제거
쿼리의 결과를 합친다. 중복된 ROW는 제거
employee_1 테이블과 employee_2 테이블 UNION 결과값
# 예제
select count(*)
from
(SELECT gu, rent_nm, rent_id AS id FROM rent_data
UNION
SELECT gu, rtn_nm AS rent_nm, rtn_id AS id FROM rent_data) a
2. UNION ALL - 중복까지 모두 출력
모든 컬럼값이 같은 ROW도 결과로 보여준다. 중복제거 하지 않는다.
UNION ALL 이 중복제거하지 않으므로 UNION 보다 속도가 빠르다.
# 예제
select count(*)
from
(SELECT gu, rent_nm, rent_id AS id FROM rent_data
UNION ALL
SELECT gu, rtn_nm AS rent_nm, rtn_id AS id FROM rent_data) a
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
'Knowledge🦢 > SQL' 카테고리의 다른 글
[SQL기초] 데이터베이스, 테이블 생성 및 삭제 (0) | 2024.04.19 |
---|---|
[SQL] 테이블 자료형 종류 (0) | 2024.04.19 |
[SQL] SQL 쿼리문의 실행 순서 (0) | 2024.04.12 |
[SQL] 집계함수에 대해서 - count(*), count(컬럼), 집계함수(컬럼) (1) | 2024.04.12 |
[SQL] 데이터 가공과 조건문 (0) | 2024.04.05 |