실행계획 해석
:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
실행계획은 해당 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
:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
<v:f eqn="val #0"></v:f><v:f eqn="sum 21600 0 #0"></v:f><v:f eqn="sum #1 0 #0"></v:f><v:f eqn="sum #1 #0 0"></v:f><v:f eqn="prod #0 9598 32768"></v:f><v:f eqn="sum 21600 0 @4"></v:f><v:f eqn="sum 21600 0 #1"></v:f><v:f eqn="min #1 @6"></v:f><v:f eqn="prod @7 1 2"></v:f><v:f eqn="prod #0 2 1"></v:f><v:f eqn="sum 21600 0 @9"></v:f><v:f eqn="val #1"></v:f><v:h yrange="0,@8" position="center,#0"></v:h><v:h yrange="@9,@10" position="bottomRight,#1"></v:h>----------------------------------------------------------
Access Operation 또는 Row Source
|
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)
<v:f eqn="val #0"></v:f><v:h position="#0,center"></v:h><o:lock v:ext="edit" shapetype="t"></o:lock> 3 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=98)
<o:lock v:ext="edit" shapetype="t"></o:lock>
Row Source Parent Key
Row Source Key
0 : SELECT
|
1 : Hash Join
|
2: FULL(DEPT)
|
3: FULL(EMP)
|
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을 수행하여 선택된 결과를 추출
댓글 없음:
댓글 쓰기