3. SQL의 조건 분기
ch 8. UNION을 사용한 쓸데없이 긴 표현
- UNION을 사용한 조건 분기는 좋지 않다.
- UNION은 내부적으로 여러개의 SELECT 구문을 실행하는 실행계획으로 해석된다 (= 테이블에 접근하는 횟수(I/O)가 늘어난다)
1) UNION을 사용한 조건 분기와 관련된 간단한 예제
- UNION을 사용한 조건 분기
|
|
- 단점 : 1. 길다, 2. 테이블에 2회 접근한다.
2) WHERE 구에서 조건 분기를 하는 사람을 초보자
|
|
3) SELECT 구를 사용한 조건 분기의 실행 계획
- 테이블 1회 접근으로 끝난다
- 구문 => 식, UNION => CASE
ch 9. SELECT 구를 사용한 조건 분기의 실행 계획
1) 집계 대상으로 조건 분기
- UNION을 사용한 방법
|
|
풀스캔이 2회 수행된다.
집계의 조건 분기도 CASE 식을 사용
|
|
- 풀스캔이 1회로 감소한다.
2) 집약 결과로 조건 분기
- 소속된 팀이 1개라면 해당 직원은 팀의 이름을 그대로 출력한다.
- 2개라면 ‘2개를 겸무’로 출력
- 3개라면 ‘3개를 겸무’로 출력
- UNION을 사용한 조건 분기
|
|
- 조건 분기가 레코드가 아닌 집합에 적용되기 때문에 WHERE가 아니라 HAVING에 쓰인다
- 3번의 테이블 접근이 필요하다.
- CASE 식을 사용한 조건 분기
|
|
- 1번의 테이블 접근과 HASH 연산이 이뤄진다.
ch 10. 그래도 UNION이 필요한 경우
1) UNINON을 사용할 수 밖에 없는 경우
- SELECT 하는 테이블이 다른 경우(FROM 구에서 테이블을 결합하고 CASE 식을 사용할 수 있으나 느려짐)
2) UNION을 사용하는 것이 성능적으로 더 좋은 경우
- UNION을 사용할 때 인덱스 사용이 가능한 경우
|
|
- OR을 사용하는 방법
|
|
- date와 flg에 인덱스가 된 경우 UNION이 더 빠를 수 있다
ch 11. 절차 지향형과 선언현
1) 구문 기반과 식 기반
- 사고의 전환이 필요, 구문 -> 식