NL조인은 Outer 테이블과 Inner 테이블의 조인키의 인덱스 유무가 매우 중요하다. 인덱스가 없다면 Outer 에서 필터되는 레코드마다 Inner 테이블을 풀스캔 혹은 필터링 할것이고 이떄 많은 비효율이 생긴다.
인덱스가 없다면 옵티마이저는 HashJoin과 Sort Merge Join을 고려한다.
내부 원리
sm join은 두 테이블을 각각 정렬한 다음 두 집합을 병합하면서 조인을 수행한다.
아래는 소트 머지 조인 방식을 그림으로 표현한 것이다.
SELECT /*+ ordered use_merge(e) */ D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME
FROM DEPT D, EMP E
WHERE D.DEPTNO = E.DEPTNO
조인 키 컬럼인 DEPTNO순으로 각 테이블을 정렬한다.
dept=10인 레코드는 EMP테이블에서 조건에맞는 레코드를 검색하다가 dept=20을 만나는 순간 멈춘다.
dept=20인 레코드는 EMP테이블에서 멈춘 지점을 기억하고 거기서부터 탐색을 시작한다.
두테이블을 정렬 후 조인하므로 옵티마이저는 테이블 순서를 신뢰하고 빠르게 병합할 수 있다.
특징