다음의SQL은Bounded Range Search(Between)이므로 ‘A” 인덱스를 사용.
즉,’A’ 인덱스는Rank 9이고 ‘B’인덱스는Rank 10조건이 되므로.
select /*+ rule */ from emp where deptno = 10 and empno between 7888 and 8888;
나. CBO
구분
설명
개념
해당 데이터베이스의 통계정보를 수집하여 통계 정보를 기준으로SQL의 실행 계획을 생성하는 옵티마이저
처리방법들에 대한 비용을 산정해보고 그 중에서 가장 적은 비용이 들어가는 처리방법을 선택하는 옵티마이저
특징
현실을 감안한 판단,통계정보의 관리를 통한 최적화 제어,옵티마이저를 깊이 이해하고 있지 않더라도 최소 성능 보장
실행계획을 미리 예측,제어가 어려움
원리
여러가지 경우의 처리시간에 비례한 비용을 산출해 내고,이들 비용에서 가장 작은 비용을 갖는 플랜을 결정
실행계획에 대한 소요시간을 구하기 위해서 데이터 분포도 및 테이블,인덱스와 클러스터의 저장 공간의 특징 등의 통계 정보를 이용하여 비용을 계산하여 선택하는 방법
특정 실행계획을 통한SQL명령문을 실행하는데 필요한 메모리,디스크I/O, CPU시간을 계산
예시
Select * from dept where deptno= 10의SQL에서dept테이블은deptno에 대한 인덱스가 있고 테이블은 전체10블록으로 구성되어 있으며 풀 테이블 스캔일 경우I/O단위를 결정하는 파라미터가db_file_multiblock_read_count=8이라면RBO는 무조건 인덱스를 타는 플랜을 결정
CBO는deptno의 인덱스를 이용해 실행하면3회의I/O가 발생한다고 가정하고 풀 테이블 스캔의 경우2회(8블록+2블록)의I/O가 발생한다면 인덱스가 있음에도 풀테이블 스캔을 선택함
다. Hint
구분
설명
개념
select, update, delete문 사용 시 옵티마이져의 파싱을 원하는 쪽으로 유도할 때 사용
특징
연산을 위한 비용 기반(Cost-Based)접근 방식을 선택하여 접근 방식 지정
인덱스(Index)보다 더 효과적인 스캔 방법
조인(Join)순서,병렬연산 등급,조인(Join)연산 등
힌트 (Oracle DBMS 기준)
RULE : 규칙기반(RULE_BASED)옵티마이저 사용
FIRST_ROWS :첫째 레코드의 추출 시간을 최소화 할 목적으로 최적화
ALL_ROWS : 모든 레코드를 모두 처리하는 시간의 최소화를 목적으로 최적화
FULL : 지정된 테이블에 대한 전체스캔
USE_NL : 먼저 특정 테이블의 로우를 액세스하고 그 값에 해당하는 다른 테이블의 로우를 찾는 작업을 해당 범위까지 실행하는 조인
CLUSTER : 지정된 테이블에 대한 클러스터 스캔
HASH : 지정된 테이블에 대한 해시스캔
INDEX_ASC : 내림차순으로 인덱스 스캔
HASH-AJ : 부정형의 조인을HASH JOIN방식
INDEX_DESC : 오름차순으로 인덱스 스캔
AND_EQUALS : 여러 개의 인덱스를 머지(MERGE)하여 사용
ORDERED : FROM절에 기술된 테이블순으로 조인
ROWID : 지정된 테이블에 대한ROWID에의한테이블스캔
USE_MERGE : 먼저 각각의 테이블의 처리범위를 스캔하여SORT한후서로MERGE하면서조인하는방식