Outer NL 조인
- Outer 기호(+)가 붙지 않은 테이블이 항상 드라이빙 테이블로 선택된다.
( (+)가 붙은 쪽이 나머지를 null로 붙인다고 생각하면 편하다. )
- outer 조인은 ERD 관계와 연관이 많기 때문에 ERD 표기법에 대한 이해가 필수이다.
( ERD 표기법은 데이버베이스 프로그래머에게는 필수이기는 한다. )
( 엔터티 간 관계를 해석할 때도 카디널리티만 보지 말고 Optionality를 반드시 따져봐야한다. )
- 혹시 있을지 모를 null 값을 두려워해 습관적으로 Outer 기호(+)를 붙인다면 성능상
불이익이 생길 수 있다.
Outer 소트 머지 조인
- Outer 소트 머지 조인도 처리 방향이 한쪽으로 고정된다.
Outer 해시 조인
- 9i에서 Outer 해시 조인을 수행해 보면, Outer 기호(+)가 붙지 않은 테이블이 항상
Build Input으로 선택된다.
- 해시 조인은 10g 부터 swap_join_input 힌트를 통해서 outer 조인의 순서 변경이 가능하다.
9i 이전 버전에서 Outer 해시 조인 튜닝
- 테이블을 2번 사용하여 한 번은 최소한의 상태로 hash 조인 하고 조인 후 build input을
줄인 상태에서 한번 더 hash_join을 한다.
- 구간을 나눠 쿼리를 여러번 수행하는 방법도 생각해볼 수 있음
( 해시 버킷당 엔트리 개수를 최소화 하면, 고객 테이브을 반복적으로 읽는 비효율에도
불구하고 더 바르게 수행될 수 있음 )
Full outer 조인
- Left Outer 조인 + Union All + Anti 조인 (Not Exists 필터) 이용 (9i 이전)
- ANSI Full outer 조인 ( 9i 이후 )
- Native Hash Full Outer 조인
● 11g 에서 'Native Hash Full Outer 조인'을 선보였고,
필요하면 10.2.0.4 버전에서도 Hidden 파라미터를 조정해 이 기능을 사용할 수 있음
● 양쪽 테이블을 한 번씩 엑세스 한다는 것이 가장 큰 변화, null인 레코드가 마지막에
출력된 것을 통해, 내부적으로 어떤 식으로 처리하는지 추정 가능
- Union All을 이용한 Full Outer 조인
● 두 테이블을 각각 한 번씩만 엑세스하였으며, 조인 대신 sort(또는 hash) group by 연산을
수행한다.
( union all 을 사용할 때는 중복 제거가 없어 group by , sum 을 사용해야 한다.)
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 2-7. 조인을 내포한 DML 튜닝 (0) | 2016.12.26 |
---|---|
성능고도화 2-6. 스칼라 서브쿼리르 이용한 조인 (0) | 2016.12.26 |
성능고도화 2-4. 조인 순서의 중요성 (0) | 2016.12.26 |
성능고도화 2-3. 해시 조인 (0) | 2016.12.26 |
성능고도화 2-2. 소트머지 조인 (0) | 2016.12.26 |