SQL 튜닝/Ch05 소트 튜닝
소트가 발생하지 않도록 SQL 작성 (2)
developer-soyun
2024. 11. 15. 16:25
SQL 작성할 때 불필요한 소트가 발생하지 않도록 주의해야 한다
5.2.1 Union vs Union All
Union - 중복을 제거하려고 소트 작업을 수행
Union All - 중복을 확인 X
될 수 있으면 Union All을 사용해야 한다
그런데 Union 대신 Union All로 변경하려다 자칫 결과 집합이 달라질 수 있으므로 주의해야 한다
- 소트 연산이 일어나지 않도록 Union All 을 사용하면서도 데이터 중복을 피하려면 아래와 같이 하면 된다
select 결제번호, 결제수단코드, 주문번호, 결제금액, 결제일자, 주문일자 ...
from 결제
where 결제일자 = '20180316'
UNION ALL
select 결제번호, 결제수단코드, 주문번호, 결제금액, 결제일자, 주문일자 ...
from 결제
where 주문일자 = '20180316'
and 결제일자<>'20180316'; --여집합
5.2.2 Exists 활용
중복 레코드를 제거할 목적으로 Distinct 연산자를 사용 → 조건에 해당하는 데이터를 모두 읽어서 중복을 제거
→ 많은 I/O 발생
- Exists 서브쿼리는 데이터 존재 여부만 확인하면 되기 때문에 조건절을 만족하는 데이터를 모두 읽지 않는다