2013년 10월 23일 수요일

오라클 실행 계획 해석하기, 옵티마이저, 쿼리튜닝강좌

오라클 실행 계획 해석하기, 옵티마이저, 쿼리튜닝강좌

실행계획을 예를 들어 하나씩 해석해 보도록 하죠^^

이전의 강좌에도 있지만 실행 계획은 일반적으로 아래와 같은 기준으로 해석 됩니다.

-        실행계획의 가장 안쪽으로 들여 쓰기 된 것이 먼저 수행
-        실행 계획의 각 문장은 들여쓰기간 한 단계 덜된 부모 문장에 종속
-        동일하게 들여 쓰기 된 문장이 여러 개 있는 경우 가장 위 문장이 우선 실행
-        인덱스를 경유하여 테이블을 Access하는 두 실행 계획은 하나로 취급(테이블 Lookup에 사용되는 Index Scan을 의미)

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

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 한 것이죠…



오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  


[기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요]

댓글 없음:

댓글 쓰기