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 서브쿼리는 데이터 존재 여부만 확인하면 되기 때문에 조건절을 만족하는 데이터를 모두 읽지 않는다
'SQL 튜닝 > Ch05 소트 튜닝' 카테고리의 다른 글
Sort Area를 적게 사용하도록 SQL 작성 (4) (2) | 2024.11.15 |
---|---|
인덱스를 이용한 소트 연산 생략 (3) (0) | 2024.11.15 |
소트 연산에 대한 이해 (1) (0) | 2024.11.15 |