오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)
실행계획은 해당 SQL을 수행하기 위한 절차이며 옵티마이저에 의해 만들어 집니다. 해석을 위해서는 Row Source Operartors Tree 또는 Row Source Level을 이용하여 해석하는데 아래 예를 들어보도록 하죠.
1. Row Source Operators Tree는 Serial Execution에 대한 Tree를 보여주는 것인데 실행계획은 Row Source로 구성되며 각각의 Row Source들을 Tree 형태로 구성하여 해석을 하는 것을 말합니다.
SQL> select ename, dname
2 from emp e, dept d
3 where e.deptno = d.deptno;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=14 Bytes=252)
1 0 HASH JOIN (Cost=5 Card=14 Bytes=252)
2 1 TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=44)
3 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=98)
Row Source Parent Key(0,1,2,3)
Row Source Key(0,1,1)
각각의 행을 Row Source 또는 Access Operation 이라 한다.
위 실행계획을 도식화 하기 위해서는 Row Source Key와 Row Source Parent Key를 알고 있으면 되는데 Row Source Key 1번은 Parent가 0번이며, 2번/3번은 1번이다. 이를 도식화하여 해것을 하는 것이다. (해석은 밑에서 위로, 좌에서 우측으로 진행을 하면 된다)
2.Row Source Level을 통한 해석
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=14 Bytes=252)
1 0 HASH JOIN (Cost=5 Card=14 Bytes=252)
2 1 TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=44)
3 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=98)
Level 1
Level 2
Level 3
가장 안쪽의 Level 3부터 해석을 하며 같은 레벨의 경우 위쪽부터 해석을 하면 된다.
DEPT 테이블을 FULL Scan한 후 DEP 테이블을 FULL Scan하여 HASH Join 후 원하는 데이터를 추출하는 실행 계획이다.
다음의 예를 보도록 하자.
SQL> select ename, dname
2 from emp e, dept d
3* where trim(e.deptno) = trim(d.deptno);
ENAME DNAME
---------- --------------
CLARK ACCOUNTING
KING ACCOUNTING
MILLER ACCOUNTING
SMITH RESEARCH
……
14 개의 행이 선택되었습니다.
Execution Plan
---------------------------------------------------------
0 SELECT STATEMENT Optimizer=HINT: RULE
1 0 MERGE JOIN
2 1 SORT (JOIN)
3 2 TABLE ACCESS (FULL) OF 'DEPT'
4 1 SORT (JOIN)
5 4 TABLE ACCESS (FULL) OF 'EMP'
위 실행계획에 대한 해석은
Level 4 : DEPT 테이블을 FULL SCAN + EMP 테이블을 FULL SCAN
Level 3 : SORT(JOIN) + SORT(JOIN) DEPT 테이블을 SORT한것과 EMP 테이블을 SORT한 두개의 집합이 된다.
Level 2 : MERGE JOIN Level 3에서 만들어진 두개의 집합을 Merge
Level 1 : SELECT STATEMENT Merge Join을 수행하여 선택된 결과를 추출
댓글 없음:
댓글 쓰기