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을 처리하는 과정 

  1. 최종 UNION[ ALL | DISTINCT ] 결과에 적합한 임시 테이블을 메모리 테이블로 생성
  2. UNION 또는 UNION DISTINCT의 경우, 임시 테이블의 모든 컬럼으로 Unique Hash 인덱스 생성 
  3. 쿼리 1실행 후 결과를 임시 테이블에 복사
  4. 쿼리 2실행 후 결과를 임시 테이블에 복사
  5. 3,4번 과정에서 임시 테이블이 특정 사이즈 이상으로 커지면 임시 테이블을 디스크 임시 테이블로 변경 
  6. 임시 테이블을 읽어서 클라이언트에 결과 전송 
  7. 임시 테이블 삭제  
UNION 컬럼들의 수가 많아지고 레코드의 사이즈가 커질수록 두 작업 모두에게 불리하겠지만, 
UNION ALL 보다는 UNION에 더 악영향이 클 것이다. 

참고 

  • UNION, UNION ALL 좋은 SQL작성 방식은 아니다. 최대한 자제하는것이 좋다. 
  • UNION, UNION ALL을 사용하게 된다면 최소한의 필요 컬럼만 SELECT 하는것이 좋다.