UNION을 사용한 조건 분기: SELECT문을 여러개 실행하여 테이블 접근 횟수 증가
→ I/O비용 증가
<UNION 사용한 조건 분기 예제>
SELECT item_name, year, price_tax_ex AS price
FROM Items
WHERE year <= 2001
UNION ALL
SELECT item_name, year, price_tax_ex AS price
FROM Items
WHERE year >= 2002;
거의 같은 쿼리를 두번 실행하여 가독성 저하
Items 테이블에 2회 접근하여 성능 저하
→ 정확한 판단 없이 UNION 사용하는 것은 자제
<SELECT 구를 사용한 조건 분기 예제> - 개선된 쿼리
SELECT item_name, year,
CASE WHEN year <= 2001 THEN price_tax_ex
WHEN year >= 2002 THEN price_tax_in END AS price
FROM Items;
Items 테이블 접근 횟수 : 1회
TABLE ACCESS FULL : 1회
→ UNION을 사용한 구문보다 2배 성능 개선
다음과 같은 테이블이 있다고 가정하자.
prefecture(지역 이름) | sex(성별) | pop(인구) |
---|---|---|
성남 | 1 | 60 |
성남 | 2 | 40 |
수원 | 1 | 30 |
수원 | 2 | 40 |
광명 | 1 | 50 |
광명 | 2 | 60 |
일산 | 1 | 20 |
일산 | 2 | 15 |
<UNION 사용한 조건 분기 예제>
SELECT prefecture, SUM(pop_men) AS pop_men, SUM(pop_wom) AS pop_wom
FROM ( SELECT prefecture, pop AS pop_men, null AS pop_wom
FROM Population
WHERE sex = '1'
UNION
SELECT prefecture, null AS pop_men, pop AS pop_wom
FROM Population
WHERE sex = '2'
GROUP BY prefecture;