4. NL 조인[조인 튜닝]

2022. 9. 19. 00:53개발 관련 책 읽기/친절한 SQL 튜닝

조인 튜닝에 들어가기 앞서, 내가 생각했을때 튜닝의 꽃은 조인튜닝이라고 생각한다. 인덱스 튜닝도 중요하고 다른것들도 중요한데 왜 조인튜닝이 중요하다고 생각했냐면.. 실제 업무에서 쿼리짤때 조인이 안들어가는 경우가 드물다.(조인없는 쿼리가 과연 있을까?? ㅋㅋ)

 

그래서 조인튜닝은 잘배우면 실무에서 바로 써먹을수 있는 좋은 기회 라고 생각한다. 😲😲

그러면 조인 튜닝에 대해서 들어가보자~

 

오라클의 대표적인 조인 알고리즘에는 3가지가 있다. (NL조인, Sort_Merge조인, Hash조인 )

그중에서 먼저 NL조인에 대하여 알아보자. NL조인의 작동방식은 말그대로 NESTED LOOPS 중첩 루프 방식이다.

C, JAVA등 언어에서 다중 반복문이라고 생각하면 쉽다!

 

[NL 조인 작동방식]

C,JAVA
PL/SQL
for(i=0; i<100; i++){ -- outer loop for(j=0; j<100; j++){ -- inner loop ..... } }
for outer in 1..100 loop for inner in 1..100 loop dbms_output.put_line(outer || ':' || inner); end loop; end loop;

 

아래의 PL/SQL과 SQL문은 내부적으로(Recursive하게) 쿼리를 반복 수행하지 않는점 이외에 동일한 처리를 한다.

PL/SQL
SQL
begin for outer in (select deptno, empno, rpad(ename, 10) ename from emp) loop -- outer 루프 for inner in (select dname from dept where deptno = outer.deptno) loop -- inner 루프 dbms_output.put_line(outer.empno||' : '||outer.ename||' : '||inner.dname); end loop; end loop; end;
select /*+ ordered use_nl(d) */ e.empno, e.ename, d.dname from emp e, dept d where d.deptno = e.deptno

 

그림 1 - NL조인 실행 계획
반응형