MYSQL_UNION , UNION ALL 차이점, 설명

2022. 5. 31. 15:36[DB]/[MySQL]_

728x90
반응형

TABLE 1]

TABLE 2]

TABLE 3]

이런 3가지 테이블이 있다고 가정합니다.


UNION : 쿼리의 결과를 합칩니다. 단 중복된 쿼리가 있으면 한가지만 출력합니다.

select bno
    , date
from 테이블 1번
where 조건문 기입
union
select bno
     , date
from 테이블 2번
where 조건문 기입
union
select bno
     , date
from 테이블 3번
where 조건문 기입

단 중복을 검사하는데 시간이 걸려 중복을 제거하지 않는 UNION ALL 보다는 속도가 느립니다.

 

결과 : 


UNION ALL : UNION 과 같으나, 중복이 있어도 제거하지 않고 전부 합해서 보여줍니다.

select bno
    , date
from 테이블 1번
where 조건문 기입
union all
select bno
     , date
from 테이블 2번
where 조건문 기입
union all
select bno
     , date
from 테이블 3번
where 조건문 기입

결과:

 

UNION 이나 UNION ALL 의 경우 임시 테이블을 메모리에 생성하고 서브쿼리의 결과를 임시테이블에 복사하고

임시 테이블을 읽어서 클라이언트에 결과를 전송합니다.

 

임시 테이블이 커지면 디스크 임시 테이블로 변경하게 되고,

UNION 의 경우 임시 테이블의 모든 컬럼으로 유니크 hash 인덱스를 생성하게 되서

UNION 이 ALL 보다 문제발생률이 높습니다.

 

좋은 방법은 아니나, 적거나, 쿼리량이 적을 경우 사용 가능합니다.

만약 사용해야한다면 필요한 컬럼 내에서 작동하게 해서 임시테이블 생성을 줄여야 속도가 나옵니다.

 

감사합니다.

728x90
반응형