실행계획(Execution plan) 분석하는 방법.
프로시저와 같은 디비 쿼리를 짜다보면 성능에 대한 의문이 듭니다.
이때 간단하게 확인해 볼 수 있는방법이 실행계획을 통한 확인입니다.
1. 예시 쿼리
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)
ID | P_ID | Operation | Ojbect name |
0 | SELECT STATEMENT | ||
1 | 0 | FILTER | |
2 | 1 | NESTED LOOPS | |
3 | 2 | TABLE ACCESS FULL | EMP |
4 | 2 | TABLE ACCESS BY ROWID | DEPT |
5 | 4 | INDEX UNIQUE SCAN | PK_DEPT |
6 | 1 | TABLE ACCESS FULL | SALGRADE |
A. 가장 먼저 실행되는부분이 가장 아래에 있는 ID가 5번인 INDEX UNIQUE SCAN 부분.
B. ID 5~ 4 단계는 DEPT테이블의 PK INDEx인 PK_DEPT 를 SCAN하여 얻은 ROWID로 DEPT 테이블을 ACCESS 한다.
C. 3번의 EMP 테이블의 ACCESS 방법은 Table Full Scan으로 읽어 4번과 Nested Loop 조인 하는 형식.
D. 다시 Nested Loop 된 결과는 Full Table Scan으로 읽은 SALGRADE 테이블에 의해 Filter 되어 결과가 나오게 된다.
4. 트리 구조로 확인하기.
5. 분석
A. Cost는 낮을수록 좋다.
B. Full Table Scan이 없을수록 좋다.
출처: http://www.jakartaproject.com/board-read.do?boardId=dbtip&boardNo=114193419425900&command=READ&t=1411017575107
'Programming > Databse' 카테고리의 다른 글
[PostgreSql] Centos7에서 PostgreSql 설치 (0) | 2017.06.15 |
---|---|
[PostgreSql] 윈도우서버에서 PostgreSql 외부 접속 허용 (0) | 2017.06.14 |
[Oracle] 대소문자 변환 (0) | 2017.03.07 |
[Oracle] ORA-02292 (0) | 2017.03.07 |
[Oracle] UPDATE (0) | 2017.02.17 |