2017년 4월 17일 월요일

(구로디지털단지,IT실무,오라클강좌,자바강좌,Oracle Hint) 실행계획 해석하기(1)


아래의 예를 보도록 할까요? 

SQL> SELECT /*+ FULL(D) */ 
              ENAME, 
              SAL, 
              JOB 
      FROM  DEPT D 
      WHERE DEPTNO = 20 
      UNION ALL 
 SELECT /*+ INDEX(E IDX_DEPT_DEPTNO) */ 
              ENAME, 
              SAL, 
              JOB 
      FROM  DEPT E 
      WHERE DEPTNO = 30 

Execution plan 
---------------------------------------------------------------- 
SELECT STATEMENT Optimizer=CHOOSE 
UNION-ALL(1) 
 TABLE ACCESS (FULL) OF ‘DEPT’(2) 
 TABLE ACCESS (BY INDEX ROWID) OF ‘DEPT’(3) 
  INDEX (RANGE SCAN) OF ‘IDX_DEPT_DEPTNO’ (NON_INIQUE) (4) 

가장 들여쓰기가 많이 되어있는 안쪽은 (4)번입니다. 그런데 인덱스를 경유하여 테이블을 Access하는 두 실행 계획은 하나로 취급한다고 하였으므로 (3)과(4)는 하나의 문장으로 취급합니다.그러므로 (2)번 문장이 제일 먼저 수행되며 그 다음 (3),(4)문장, 그리고 (1)번 문장이 수행됩니다. 즉 DEPT TABLE에서 DEPTNO가 20인 데이터는 (2)번에 의해 DEPT TABLE을 FULL SCAN해서 얻었으며 30인 데이터는 IDX_DEPT_DEPTNO 인덱스를 통하여 얻어진 ROWID 값을 이용하여 DEPT TABLE을 Access하여 얻은 것 입니다. 그런 다음 (1)에 의해 두 데이터를  UNION ALL 한 것이죠… 

* 이종철님에 의해서 게시물 이동되었습니다 (2006-06-04 12:28)

댓글 없음:

댓글 쓰기