[Oracle] OUTER JOIN 조인 순서

당당·2023년 12월 30일
0

Oracle

목록 보기
41/51
post-thumbnail

📔설명

OUTER JOIN의 조인 순서와 해쉬 테이블 구성 방법을 알아보자.


🍔OUTER JOIN 조인 순서

select e.ename, d.loc
from emp e, dept d
where e.deptno(+) = d.deptno;

위의 sql은 dept 테이블을 기준으로 left outer join을 하는 거랑 똑같다.
위와 같은 경우는 조인 순서가 dept->emp가 된다. dept테이블에 있는 것을 다 읽고, 그 다음 조인하는 것으로 생각하면 된다.


🌯OUTER JOIN 해시 조인시 해시 테이블

select /*+ gather_plan_statistics leading(d e) use_hash(e) */ e.ename, d.loc
from emp e, dept d
where e.deptno(+)=d.deptno;

위와 같은 경우는 dept테이블이 해시 테이블로 들어간다.

하지만, 아우터 조인 순서는 정해져있는데 해시 테이블을 이 순서와 관계없이 지정할 수 있을까?

select /*+ gather_plan_statistics leading(d e) use_hash(e) */ e.ename, d.loc
from emp e, dept d
where e.deptno=d.deptno(+);

--원래 순서 : emp->dept

조인 순서가 정해져있기 때문에, 해시 테이블을 dept 테이블로 지정할 수 없다.
이럴 때 쓰는 힌트가 있다!
swap_join_inputs() 힌트를 사용하면 된다!

select /*+ gather_plan_statistics leading(d e) use_hash(e) 
	swap_join_inputs(d) */ e.ename, d.loc
from emp e, dept d
where e.deptno=d.deptno(+);

profile
MySQL DBA 신입

0개의 댓글