반응형
아래와 같은 두 개의 테이블이 있다고 가정합니다.
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 |