NL조인(Nested Loop)
NL 조인은 인덱스를 이용한 조인이다
소량 검색에 용이하다
이중 for문이다
4.1.1 기본 메커니즘
- 조인하기 위해서는 왼쪽 테이블이 작은 것이 좋다
- Inner 쪽 테이블은 인덱스를 사용해야 한다. 그렇지 않으면, Outer 루프에서 읽은 건수만큼 Table Full Scan을 반복해야한다.
4.1.2 NL 조인 실행계획 제어
select /*+ ordered use_nl(B) use_nl(C) use_hash(D) */ *
from A,B,C,D
where ... ;
- use_nl : nl을 사용해라
- use_hash : hash를 사용해라
select /*+ leading(C,A,D,B) use_nl(A) use_nl(D) use_hash(B) */ *
from A,B,C,D
where ... ;
- leading : 순서 바꿔주기
- leading vs ordered by
- 원래 쿼리는 건들지 않는 게 좋으므로 leading을 사용하는 것이 더 좋다
4.1.3 NL 조인 수행 과정 분석
select /*+ ordered use_nl(c) index(e) index(c) */
e.사원번호, e.사원명, e.입사일자,
c.고객번호, c.고객명, c.전화번호, c.최종주무늠액
from 사원 e, 고객 c
where c.관리사원번호 = e.사원번호 ---------1
and e.입사일자 >= '19990101' ---------2
and e.부서코드 = 'Z123' ---------3
and c.최종주문금액 >= 20000; ----------4
조건절 비교 순서가 어떻게 될까?
- 사원의 테이블이 고객의 테이블보다 작기 때문에 사원 테이블 먼저 비교를 해야한다
- 2-3-1-4 순서로 처리된다
4.1.5 NL 조인 특징 요약
- 랜덤 액세스 위주의 조인 방식이라는 점
- 조인을 한 레코드씩 순차적으로 진행한다는 점
- 대량 데이터 처리 시 매우 치명적인 한계를 드러낸다
- 반대로 이 두번째 특징 때문에 아무리 큰 테이블을 조인하더라도 매우 빠른 응답 속도를 낼 수 있다
- 다른 조인 방식과 비교할 때 인덱스 구성 전략이 특히 중요하다는 점
NL 조인은 소량 데이터를 주로 처리하거나 부분범위 처리가 가능한 온라인 트랜잭션 처리(OLTP) 시스템에 적합한 조인 방식이라고 할 수 있다
'SQL 튜닝 > Ch04 조인 튜닝' 카테고리의 다른 글
4.4 서브쿼리 조인 (0) | 2024.11.12 |
---|---|
4.3 해시 조인 (0) | 2024.11.12 |
4.2 소트 머지 조인 (0) | 2024.11.12 |