본문 바로가기
프로그래밍 공부/DBMS

[lesson] DBMS - Optimizer / HINT

by Luna_lua 2021. 8. 21.
반응형

<OPTIMIZER>

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

사용자가 쿼리문으로 결과를 요청하면, 이를 생성하는데 필요한 처리경로는 DBMS에 내장된 OPTIMIZER가 자동으로 생성하게 됩니다.

여기서 OPTIMIZER가 생성한 SQL처리 경로를 실행계획이라고 합니다.

 

<OPTIMIZER의 SQL 최적화 과정>

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

2. 데이터 딕셔너리에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계 정보를 이용하여 각 실행 계획의 예상비용을 산정합니다.

3. 각 실행 계획의 예상비용을 산정합니다.

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

 

<OPTIMIZER의 종류>

1. 규칙기반 옵티마이저( RBO - RULE BASED OPTIMIZER, 휴리스틱(HEURISTIC) 옵티마이저)

     - 미리 정해진 규칙에 따라 실행합니다.

    - Oracle 10g버전 부터는 RBO에 대한 지원 중단되었습니다.

 

2. 비용기반 옵티마이저 ( CBO - COST VASED OPTIMIZER)

     - 비용이 가장 낮은 실행 계획을 선택하여 실행합니다.

 

<쿼리문 실행시 작동 되는 순서>

 

 

<HINT>

 

HINT란 SELECT문에 실행가소 싶은 계호기를 전달할 때 사용하는 문법입니다.

오라클이 항상 최것의 실행 경로를 만들어내는것이 불가능 하기에, 직접 최적의 실행 경로를 작성해주는 문법입니다.

사용자(DBA 등)가 특정 SQL문장에서 어떤 인덱스가 사용빈도가 높은지 알고 있을때 OPTIMIZER로 사용한 실행 계획보다 HINT로 실행 계획을 구사하는것이 더욱 효율적입니다.

 

HINT를 사용한다면, OPTIMIZER의 목표변경, 병령 및 직력 처리, 조인순서, 엑세스 경로등 설정을 해줄수 있으며, 특히 데이터 값을 정렬할때 사용됩니다.

 

장점이자 단점은 잘못 작성되어도 실행할 때에 무시되며, 별도의 오류는 발생하지 않습니다.

기본 문법은 /*+ 로 시작하며, */로 마칩니다. 그리고 이 사이에서 컬러명을 작성할 때 ,(콤마)를 사용하지 않습니다.

 

- 사용 예제

SELECT /*+ INDEX_DESC(테이블명 PK명)*/ 컬럼명1, 컬럼명2, .... FROM 테이블명	// 내림차순
SELECT /*+ INDEX(테이블명 PK명)*/ 컬럼명1, 컬럼명2, .... FROM 테이블명		// 오름차순 (ASC는 생략가능)

 

반응형