130P
134P
중첩 루프 조인(NESTED LOOP)
DRIVING 테이블 - 먼저 엑세스 하는 테이블
INNER 테이블 - 뒤에 엑세스 하는 테이블
중첩 루프 조인에서 조인에 참여하는 테이블이 어떤 역할 을 수행하는가에 따라 SQL 최적화를 위한 인덱스가 변한다.
DRIVING 테이블
조건을 만족하는 데이터에 대해 한 번만 엑세스하며 조인 조건을 상수로 제공받지 못한다.
INNER 테이블
DRIVING 테이블에서 추출되는 데이터 건수만큼 반복 수행하며 조인 조건을 상수로 받는다.
----
DRIVING 테이블
실행 계획에서 위에 생성되는 테이블이 DRIVING 테이블의 역할을 수행하며 커리 밤위를 감소시키는 역할로 조인 조건을 사용할 수 없게 된다.
DRIVING 테이블은 조건을 만족하는 데이터에 한 번만 엑세스한다.
INNER 테이블
실행 계획에서 밑에 생성되는 테이블
조인 조건을 처리 범위 감소 조건으로 사용할 수 있다.
DRIVING 테이블에서 추출되는 데이터의 건수만큼 반복 수행하며 조인 조건을 상수로 제공받는다.
----
140P
향상된 중첩 루프 조인
DRIVING 테이블과 INNER 테이블이 1:M의 관계일 때 하나 하나에 대해 랜덤 엑세스를 수행하는 것이 아니라 DRIVING 테이블에서 추출한 값에 대해 INNER 테이블의 인덱스에서 추출되는 여러 건에 대한 한 번에 값을 모아 INNER 테이블에 엑세스한다.
INNER 테이블의 데이터가 정렬되어 저장되어 있다면 몇 개의 블록만 엑세스하여 모든 결과를 추출할 수 있다.
향상된 중첩 루프 조인을 사용하면 INNER 테이블에 엑세스하는 I/O의 횟수를 감소시킬 수 있다.
향상된 중첩 루프 조인이 효과적으로 사용되기 위해서는 클러스터링 팩터가 양호해야 한다.
특정 컬럼으로 데이터가 모여서 저장되어 있는지 아닌지를 클러스터링 팩터라고 한다.
향상된 중첩 루프 조인을 효과적으로 이용하려면 다음의 조건을 만족해야 한다.
1:M 관계의 테이블들에 대한 중첩 루프 조인
1에 해당하는 테이블이 DRIVING 테이블로 수행되며 M에 해당하는 테이블이 INNER 테이블로 수행
M에 해당하는 테이블은 조인 조건에 의해 정렬되어 데이터 저장(조인 컬럼에 의해 M에 해당하는 테이블은 클러스터링 팩터 양호)
----
144P
중첩 루프 조인에서 성능을 좌우하는 항목
INNER 테이블의 효과적인 엑세스
DRIVING 테이블에서 추출되는 데이터 건수
DRIVING 테이블의 엑세스 최적화
----
INNER 테이블의 반복 엑세스를 어떻게 최적화할 것인가? - 최적화된 인덱스
EX) KR-CODE + 거래일자
중첩 루프 조인의 성능 최적화에서 가장 중요한 요소는 INNER 테이블의 반복 엑세스를 최적화 하는 것이다.
INNER 테이블의 반복 엑세스를 최적화하기 위해서는 처리 범위를 최대한 감소시킬 수 있는 인덱스가 선정되어야 한다.
중첩 루프 조인에서 INNER 테이블은 조인 조건을 상수로 제공받고, 일반적으로 조인 조건에서 점 조건을 사용하기 때문에 INNER 테이블의 인덱스 선정은 성능의 핵심이 될 것디다.
INNER 테이블에서 조인 조건과 그외 점 조건으로 인덱스를 구성하고 선분 조건을 인덱스 뒤에 추가하는 것이 가장 효과적이다.
----
DRIVING 테이블의 처리 범위
----
149P