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 서브쿼리도 일반 조인문처럼 제거됨