- 옵티마이저가 Driving Table을 결정함(Outer Table)
- Driving Table이 아닌 테이블은 Driven Table로 지정함
-> (lnner Table)이라고도 함
- Driving Table의 연관된 모든 row를 조인에 의해 액세스
튜닝 포인트
- 테이블 간 조인 횟수를 최소화 할 수 있도록 Driving Table을
-> 조인 순서 제어
Driven Table의 연결고리 칼럼에 대한 인덱스 구성
NESTED LOOPS JOIN의 장단점
1 인덱스에 의한 랜덤 액세스에 기반하고 있기 때문에 대량의 데이터 처리시 적합하지 않음
2 Driving Table로는 테이블의 데이터가 적은 마스터 테이블이거나, where절 조건으로 적절하게 row를
제어할 수 있는 것이어야 함
3 Driven Table에는 조인을 위한 적절한 인덱스가 생성되어 있어야 함
조인 순서 제어 방법
조인 순서 제어를 위한 힌트 사용
/*+ORDERED*/
FROM절에 기술한 테이블 순서대로 제어
/*+LEADING(table명)*/
힌트 내에 제시한 테이블이 드라이빙으로 채택됨
ORDERED힌트와 같이 사용할 경우 LEADING힌트는 무시됨
조인 순서 제어 방법
뷰활용
서프레싱 활용
FROM절의 테이블 순서 변경
- RBO하에서 각 테이블에 대한 규칙이 동일할 때
FROM절로부터 멀리 있는 테이블부터 처리함
CBO에서는 이 방법은 의미가 없음
양쪽 모두 연결고리에 대한 인덱스가 없는 경우
driven 테이블에 대한 FULL table scan 회수는
driving 테이블로부터 읽어 들이는 row수 만큼이 됨
-> 이러한 상황에서 할 수 있는 조인이 Sort Merge와 Hash조인임
정리
Nested Loops 조인의 튜닝 포인트
- 테이블 간의 조인 횟수를 최소화를 위한 조인 순서의 최적화
- driven 테이블의 경우 연결고리 인덱스가 반드시 사용되어야 함
Nested Loops 조인의 장단점
- 장점
인덱스를 통한 랜덤 액세스기반에서 좋은 성능을 보임
- 단점
인덱스가 없는 상태에선 속도가 저하됨
대용량 데이터를 처리할 경우 성능이 저하됨
조인 순서 제어방법
힌트사용
- 조인순서 제어
- From절에 기술한 테이블 순서대로 제어
- 뷰활용
- 서프레싱 활용
- FROM절 테이블 순서 변경(단,CBO에서는 의미가 없음)
연결고리 칼럼에 대한 인덱스의 중요성
- 양쪽 모두 인덱스가 있는 경우
- 두 테이블 중 조회되는 결과가 적은 테이블을 선택하여 드라이빙 테이블로 선택함
- 한쪽만 인덱스가 있는 경우
- 인덱스가 없는 쪽 테이블을 드라이빙 테이블로 사용함
- 양쪽 모두 인덱스가 없는 경우
- Nested Loops 조인방식으로 조인이 이뤄지지 않음
'IT > DB' 카테고리의 다른 글
[SQL] CARTESIAN PRODUCT (0) | 2021.11.29 |
---|---|
[SQL] SORT/MERGE JOIN (0) | 2021.11.29 |
[SQL] 인덱스 활용이 불가능한 경우 (0) | 2021.11.23 |
[SQL] 옵티마이저의 개념 및 종류와 인덱스 (0) | 2021.11.09 |
SQL 튜닝 실행계획 및 옵티마이저 (0) | 2021.11.01 |