실행계획 해석하기(Nested Loops Join)
실행 계획을 보면 Nested Loop라는 것이 보이는데 그 바로 밑에 나온 문장이 드라이빙 테이블(OUTER TABLE)이며 그 아래 문장이 비드라이빙 테이블(INNER TABLE) 입니다.
다음의 예를 보도록 하죠…
SQL> SELECT E.EMPNO,
E.ENAME,
D.DNAME,
D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY EMPNO;
9i)
Execution Plan
------------------------------------------------------
SELECT STATEMENT Optimizer=CHOOSE
SORT (ORDER BY)
TABLE ACCESS (BY INDEX ROWID) OF ‘EMP’
NESTED LOOPS
TABLE ACCESS (FULL) OF ‘DEPT’
INDEX (RANGE SCAN) OF ‘IDX_EMP_DEPTNO’ (NON UNIQUE)
8i)
Execution Plan
------------------------------------------------------
SELECT STATEMENT Optimizer=CHOOSE
SORT (ORDER BY)
NESTED LOOPS
TABLE ACCESS (FULL) OF ‘DEPT’
TABLE ACCESS (BY INDEX ROWIDD) OF ‘EMP’
INDEX (RANGE SCAN) OF ‘IDX_EMP_DEPTNO’ (NON UNIQUE)
중첩 루프 조인의 경우 들여쓰기 보다는 드라이빙 테이블을 시작시점으로 해석을 해야 하는데 위에서 DEPT 테이블이 드라이빙 테이블 입니다.
즉 DEPT 테이블을 FULL SCAN 하면서 추출되는 ROW 하나마다 EMP TABLE의 인덱스(IDX_EMP_DEPTNO, EMP 테이블의 DEPTNO에 대한 인덱스)를 이용하여 원하는 ROW를 추출하는 것입니다. 이렇게 얻어진 결과에 대해 SORT(ORDER BY)를 하여 최종적인 결과를 내놓는 것입니다.
참고로 오라클에서는 조인 컬럼들에 대해 인덱스가 존재하지 않는다면 중첩 루프 조인(Nested Loop Join)이 아닌 다음과 같은 실행계획을 만들게 됩니다. (아래에서는 조인 컬럼에 변형을 가해 인덱스가 사용되지 않도록 하였습니다)
SQL> SELECT E.EMPNO,
E.ENAME,
D.DNAME,
D.LOC
FROM EMP E, DEPT D
WHERE RTRIM(E.DEPTNO) = RTRIM(D.DEPTNO)
ORDER BY EMPNO;
Execution Plan
------------------------------------------------------
SELECT STATEMENT Optimizer=CHOOSE
SORT (ORDER BY)
MERGE JOIN
SORT(JOIN)
TABLE ACCESS(FULL) OF ‘DEPT’
SORT(JOIN)
TABLE ACCESS(FULL) OF ‘EMP’
위의 경우는 DEPT 테이블을 FULL SCAN해서 나온 결과 SET와 EMP 테이블을 FULL SCAN 해서 찾은 결과 SET을 모아서 조건을 만족하는 ROW를 추출하는 MERGE JOIN 방식으로 실행 계획이 생성 되었습니다.
기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1786 | ||
[채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1302 | ||
53 | [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… | 03-15 | 1043 | |
52 | [주말주간]C#, ASP.NET마스터 | 01-31 | 1201 | |
51 | [평일,기업100%환급]SQL기초에서 Schema Object까지 | 01-31 | 1001 | |
50 | [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 | 01-31 | 900 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 | 01-19 | 1202 | |
48 | [평일주간,평일야간,주말]안드로이드개발자과정 | 01-11 | 1067 | |
47 | [평일야간,주말주간]JAVA,Network&WEB&Framework | 01-03 | 1546 | |
46 | 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1786 | |
45 | [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… | 12-19 | 1314 | |
44 | 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) | 12-14 | 1305 | |
43 | [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1302 | |
42 | [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 | 12-09 | 1045 | |
41 | [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1210 | |
40 | [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… | 12-01 | 1419 | |
39 | [평일야간,주말,주말야간]SQL기초에서실무까지(SQL기초,PLSQL,힌… | 12-01 | 920 |
댓글 없음:
댓글 쓰기