06 조인 제거

  • 1:M 관계인 두 테이블 조인시 조인문 외에는 1쪽 테이블을 참조하지 않는다면 옵티마이저가 M쪽 테이블만 읽도록 쿼리를 변환
  • '조인 제거' 또는 '테이블 제거'
  • 오라클은 10g부터 작동

select e.empno, e.ename, e.deptno, e.hiredate
from dept d, emp e
where d.deptno = e.deptno

Rows    Row Source Operation
------- ----------------------------------------------------
     14 TABLE ACCESS FULL EMP (cr=8 pr=0 pw=0 time=58 us)


  • 조인 제거 제어 방법

파라미터: alter session set "_optimizer_join_elimination_enabled" = true ;

힌트: eliminate_join, no_eliminate_join

  • 조건

PK, FK 제약이 설정되어 있어야 함
FK가 설정되어 있더라도 조인컬럼이 null 허용 컬럼이면 결과가 틀릴 수 있음
 -> 오류 방지를 위해 옵티마이저가 내부적으로 e.deptno is not null 조건 추가
11g 부터 PK와 FK 제약이 설정되어 있으면 in 또는 exists 서브쿼리도 일반 조인문처럼 제거됨