Database
UNION과 UNION ALL 의 차이
IFLA
2024. 2. 16. 09:00
목차
UNION과 UNION ALL
합집합을 사용할 때 UNION과 UNION ALL 이용해 쿼리를 작성한다.
UNION 사용법 (중복 제거)
SELECT kind,
name,
box
FROM fruit
WHERE box >= 2
UNION
SELECT kind,
name,
kind_no
FROM fruit
WHERE kind_no = 2
위의 쿼리를 수행하면 중복된 쿼리는 제거된다. UNION 에는 DISTINCT가 기본적으로 적용된다. 그래서 명시가 되어있지 않아도 중복된 부분은 제거되어 표시된다.
UNION ALL 도 UNION과 동일하게 사용하면 된다. 대신 결과는 다르다. UNION ALL 은 중복을 허용하기 때문에 모든 결과가 나타난다. UNION과 UNION ALL의 차이점은 중복을 제거하느냐 안하느냐의 차이다.
UNION ALL 과 UNION 처리하는 과정
1. 최종 UNION 결과에 적합한 임시 테이블을 메모리 테이블로 생성한다.
2. UNION 또는 UNION DISTINCT 의 경우, 임시 테이블의 모든 컬럼을 Unique Hash 인덱스 생성한다.
3. 서브쿼리 1 실행 후 결과를 임시테이블에 복사한다.
4. 서브쿼리 2 실행 후 결과를 임시테이블에 복사한다.
5. 임시 테이블을 읽어서 클라이언트에 결과를 전송한다.
6. 임시 테이블을 삭제한다.
위의 처리 과정을 통해 결과를 클라이언트에게 보여준다. 데이터가 많지 않을 때는 금방 결과를 알 수 있지만 데이터가 수백만 건에 달하면 말이 달라진다. 수백만 건에 대해서 서브 쿼리를 2 번 실행한 후 임시테이블에 복사한 결과를 보여주기 때문에 시간이 더 많이 소요된다. 차라리 테이블을 통합하는 게 성능 향상에 좋다.
- 실제로 UNION 과 UNION ALL 을 좋지 않은 쿼리이기 때문에 사용을 지양한다.