반응형

아래와 같은 두 개의 테이블이 있다고 가정합니다.

TABLE_A TABLE_B

----------------- -----------------

FLD1 FLD1

----------------- -----------------

1 5

2 3

3 1

----------------- -----------------

이 때...

SELECT FLD1 FROM TABLE_A

UNION ALL

SELECT FLD1 FROM TABLE_B

하면 결과는

-----------------

FLD1

-----------------

1

2

3

5

3

1

-----------------

이 됩니다. 두 쿼리의 결과를 단순히 합친 것이죠.

그런데

SELECT FLD1 FROM TABLE_A

UNION

SELECT FLD1 FROM TABLE_B

하면 결과는

-----------------

FLD1

-----------------

1

2

3

5

-----------------

이 됩니다. 두 테이블의 결과를 합치되, 중복된 값을 제외하죠.

이렇게 중복을 제거하기 위해 불가피하게 '소트'를 하게 됩니다.

따라서 자료가 많거나 Index가 되어 있지 않은 필드를 대상으로 하게 되면

쿼리 시간이 길어질 수 있습니다.

 

union은 distinct와 같은 역할을 하기 때문에,

union all 보다 처리 속도가 느립니다.

되도록이면 union all 을 사용하세요.

'데이터베이스' 카테고리의 다른 글

[mysql] WORKBENCH 여러 쿼리문 실행 단축키  (0) 2020.10.27
MySQL 숫자, 특수문자 체크  (0) 2019.10.28
MYSQL TokuDB  (0) 2019.09.20
중복 데이터를 가져오는 쿼리 문  (0) 2019.08.06
MYbatis fetchSize 설정  (0) 2019.07.09

+ Recent posts