2014년 9월 9일 화요일

실행계획 해석하기(Nested Loops Join)[오라클개발자교육/오라클/ORACLE강좌/오라클교육잘하는곳/오라클교육추천/ORACLE실무교육/ORACLE/ORACLE교육/ORACLE학원/오라클실무교육]

실행계획 해석하기(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-271786
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111302
53 [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… 오라클자바…03-151043
52 [주말주간]C#, ASP.NET마스터 오라클자바…01-311201
51 [평일,기업100%환급]SQL기초에서 Schema Object까지 오라클자바…01-311001
50 [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 오라클자바…01-31900
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191202
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111067
47 [평일야간,주말주간]JAVA,Network&WEB&Framework 오라클자바…01-031546
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… 오라클자바…12-271786
45 [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… 오라클자바…12-191314
44 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) 오라클자바…12-141305
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111302
42 [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 오라클자바…12-091045
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011210
40 [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… 오라클자바…12-011419
39 [평일야간,주말,주말야간]SQL기초에서실무까지(SQL기초,PLSQL,힌… 오라클자바…12-01920

댓글 없음:

댓글 쓰기