본문 바로가기

오라클 실무..

실행계획 읽기

쿼리

SELECT *

FROM emp t1, dept t2

WHERE t1.dept_no = t2.dept_+no

AND not exists

( SELECT *

FROM salgrade

WHERE sal BETWEEN 1000 AND 2000)

위의 쿼리에 대해 실행계획이 다음과 같이 나왔다

그럼 이를 어떻게 읽는 것인가? ㅡ.ㅡ?

IDP_IDOperationOjbect name
0SELECT STATEMENT
10 FILTER
21 NESTED LOOPS
32 TABLE ACCESS FULLEMP
42TABLE ACCESS BY ROWIDDEPT
54 INDEX UNIQUE SCANPK_DEPT
61TABLE ACCESS FULLSALGRADE

ID와 P_ID를 유심히 살펴보자

먼가 상관성 있어 보인다

즉 P_ID는 부모의 ID로 아래와 같이 트리 구조를 만들어 볼 수 있다


트리를 만들어 보니 읽기가 편하다!

가장 먼저 실행되는부분이 가장 아래에 있는ID가 5번인 INDEX UNIQUE SCAN 부분이다

즉 ID 5~ 4 단계는 DEPT테이블의 PK INDEx인 PK_DEPT 를 SCAN하여 얻은 ROWID로 DEPT 테이블을 ACCESS 한다는 말이다

3번의 EMP 테이블의 ACCESS 방법은 Table Full Scan으로 읽어 4번과 Nested Loop 조인 하는 형식을 말한다

다시Nested Loop 된 결과(2번)는 Full Table Scan으로 읽은 SALGRADE 테이블에 의해 Filter 되어 결과가 나오게 된다

쉽죵?

'오라클 실무..' 카테고리의 다른 글

"SWOT 분석" - 제안서에서 절대로 빠지지 않는 목차  (0) 2007.04.27
Tuning 기초 - 2  (1) 2006.05.17
Tuning 기초 - 2  (1) 2006.05.17
Tuning 기초 - 1  (1) 2006.05.17
NESTED LOOP, SORT MERGE, HASH JOIN  (1) 2006.05.17