SQL Optimizer - 실행계획과 비용

윤상훈·2022년 3월 1일
0

SQLP

목록 보기
5/9

옵티마이저는 최적의 실행계획을 선택하는 엔진이다.
그래서 여러 실행계획 후보군에서 가장 비용이 적은 것을 선택한다.

이를 확인해보기 위해 SCOTT계정으로 접속하여 아래와 같이 테이블을 생성한다.

-- table t
CREATE TABLE t AS
SELECT d.no, e.*
FROM emp e
, (SELECT ROWNUM no FROM DUAL CONNECT BY LEVEL <= 1000) d;

마찬가지로, 아래의 두 인덱스를 생성한다.

-- index : t_x01
CREATE INDEX t_x01 ON t(deptno, no);

-- index : t_x02
CREATE INDEX t_x02 ON t(deptno, job, no);

아래와 같이 실행하게되면 에러가 발생할 수 있다.

-- 통계정보 수집
EXEC dbms_stats.gather_table_stats(user, 't');

-- 실행계획 확인
SET AUTOTRACE TRACEONLY exp;

팝업 메시지에서 알려주는대로 SCOTT 계정에 권한을 주기로 한다.

Admin 계정 접속

GRANT SELECT_CATALOG_ROLE to SCOTT;
GRANT SELECT ANY DICTIONARY to SCOTT;

다시, SCOTT으로 돌아온다.

F10을 누르면 해당 쿼리가 실행되기 이전의 실행계획을 볼 수 있고
F6을 누르면 실제 결과가 실행되고 난 후의 정보를 볼 수 있다.

위 그림은 각 쿼리별 COST를 보여준다.
여기서 COST는 I/O 횟수 또는 예상 소요시간과 같은 비용을 말한다.
3개의 쿼리 중, 가장 상위의 쿼리를 실행했을 때 채택된 인덱스가
COST가 가장 적은 t_x01인 것을 보면 옵티마이저는 COST가 가장
적은 실행계획을 최적의 계획으로 뽑는다는 것을 알 수 있다.


-SQL 전문가 가이드, 한국데이터산업진흥원 p.489

profile
데이터를 사랑하는 개발자

0개의 댓글