본문 바로가기

DBMS

[DBMS] 12

옵티마이저(OPTIMIZER)

- SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로(최저비용)를 생성해주는 DBMS 내부의 핵심 엔진

- 사용자가 쿼리문(SQL)으로 결과를 요청하면, 이를 생성하는 데 필요한 처리경로는

DBMS에 내장된 옵티마이저가 자동으로 생성한다.

- 옵티마이저가 생성한 SQL 처리경로를 실행 계획(Execution Plan)이라고 한다.

※ COST : 예상 수행 시간, 쿼리를 수행하는 데 소요되는 일량 또는 시간

※ CARDINALITY : 실행 결과의 건수

표시된 아이콘을 클릭하여 Cost 및 Cardinality 확인

 

옵티마이저의 SQL 최적화 과정

- 사용자가 작성한 쿼리 수행을 위해, 실행될 만한 실행 계획을 찾는다.

- 데이터 딕셔너리에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계 정보를 이용해

각 실행 계획의 예상 비용을 산정한다.

- 각 실행 계획을 비교해서 최저 비용을 갖는 하나를 선택하여 실행한다.

옵티마이저 종류

1. 규칙 기반 옵티마이저(RBO), 휴리스틱(Heuristic) 옵티마이저

- 미리 정해진 규칙에 따라 실행

- Oracle 10g 버전부터는 RBO에 대한 지원 중단

2. 비용 기반 옵티마이저(CBO)

- 비용이 가장 낮은 실행 계획을 선택

SQL 실행 순서

FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY

힌트(Hint) : /*+ hint*/

- SELECT문에 실행하고 싶은 계획을 전달할 때 사용하는 문법

- 잘못 작성되어도 실행할 때에는 무시되며 별도의 오류는 발생하지 않는다.

- /*+로 시작되며 */로 마친다. 또한 뒤에 컬럼명을 작성할 때 ','를 사용하지 않는다.

- SELECT /*+ INDEX_DESC(테이블명 PK명)*/ 컬럼명1, 컬럼명2, ... FROM 테이블명

(ex)

※ 힌트(Hint) 사용 전 PLAYER 테이블의 INDEX값(PK값) 검색

SELECT I.INDEX_NAME FROM USER_IND_COLUMNS I
WHERE TABLE_NAME = 'PLAYER';

 

PLAYER 테이블의 INDEX값

 

1. PLAYER 테이블에서 PLAYER_PK 컬럼을 기준으로 INDEX를 내림차순으로 가져오기

SELECT /*+ INDEX_DESC(PLAYER PLAYER_PK)*/ * FROM PLAYER;

 

2. PLAYER 테이블에서 PLAYER_PK 컬럼을 기준으로 INDEX를 오름차순으로 가져오기

SELECT /*+ INDEX(PLAYER PLAYER_PK)*/ * FROM PLAYER;

'DBMS' 카테고리의 다른 글

[DBMS] 14  (0) 2021.11.07
[DBMS] 13  (0) 2021.11.06
[DBMS] 11  (0) 2021.11.04
[DBMS] 10  (0) 2021.11.03
[DBMS] 09  (0) 2021.11.02