728x90
반응형

- 옵티마이저가 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

+ Recent posts