
옵티마이저의 동작 과정
최적화란 행동을 할 때, 어떻게 할 것인지를 정하는 것.
단, 옵티마이저가 항상 최적의 실행 계획을 선택하는 것은 아니다. 따라서 SQL 힌트(Hint) 를 사용하여 강제로 특정 계획을 유도할 수 있다.
SELECT /*+ FULL(emp) */ * FROM employees emp;
FULL(테이블명) → 강제적으로 Full Table Scan 실행
INDEX(테이블명, 인덱스명) → 특정 인덱스를 사용하도록 강제
LEADING(테이블명) → 조인의 선행 테이블을 지정
ORDERED → 조인의 순서를 지정
USE_NL(테이블명) → Nested Loop Join을 강제
옵티마이저는 하나의 프로세스인 만큼, 시행하는데 시간이 걸린다. 비용을 계산하는 과정을 감수할 필요가 있을 때 시행하는 것. 인덱스와 유사한 의미로 생각하자.
규칙 기반 옵티마이저

비용 기반 옵티마이저
CBO, Cost-Based Optimizer
비용 기반 옵티마이저는 통계 정보(Statistics)에 기반해서 시행된다.
CBO는 실행 계획을 평가할 때 비용(Cost) 개념을 사용한다.
따라서 통계에 기반하여 비용이 많이 드는 방식과 적게 드는 방식을 선정, 적게 드는 방식으로 진행된다.
구조

실행 계획

인덱스는 검색 속도 향상을 위한 기술이자 일종의 책갈피와 같은 역할을 한다.
데이터 - ROWID(주소) 쌍으로 저장된다.
B-Tree 인덱스

비트맵 인덱스

REVERSE KEY 인덱스

C_CD VARCHAR2(20 BYTE) No 1 회사코드
EMP_ID VARCHAR2(20 BYTE) No 2 사번
STAT_CD VARCHAR2(20 BYTE) Yes 3 재직상태
ENTER_TYPE VARCHAR2(20 BYTE) Yes 4 입사유형
BIZPL_CD VARCHAR2(20 BYTE) Yes 5 사업장코드
RE_GRD_CD VARCHAR2(20 BYTE) Yes 6 채용등급코드
ENTER_YMD VARCHAR2(8 BYTE) Yes 7 입사일
GRP_YMD VARCHAR2(8 BYTE) Yes 8 그룹입사일
RETIRE_YMD VARCHAR2(20 BYTE) Yes 9 퇴사일
PER_NO VARCHAR2(36 BYTE) Yes 10 주민번호
GENDER_TYPE VARCHAR2(20 BYTE) Yes 11 성별유형
EMP_NM VARCHAR2(300 BYTE) Yes 12 사원명
CHA_EMP_NM VARCHAR2(300 BYTE) Yes 13 한자사원명
ENG_EMP_NM VARCHAR2(300 BYTE) Yes 14 영문사원명
BIRTH_YMD VARCHAR2(8 BYTE) Yes 15 생일
LNS_TYPE VARCHAR2(20 BYTE) Yes 16 음양유형
MARRY_YN VARCHAR2(1 BYTE) Yes 17 결혼여부
MARRY_YMD VARCHAR2(20 BYTE) Yes 18 결혼일
NTNL_CD VARCHAR2(20 BYTE) Yes 19 국가코드
OFFICE_TEL_NO VARCHAR2(300 BYTE) Yes 20 구내전화번호
TEL_NO VARCHAR2(300 BYTE) Yes 21 전화번호
EGC_TEL_NO VARCHAR2(300 BYTE) Yes 22 긴급전화번호
MOBILE_NO VARCHAR2(300 BYTE) Yes 23 이동전화
MAIL_ADDR VARCHAR2(300 BYTE) Yes 24 메일주소
PHOTO_PATH VARCHAR2(300 BYTE) Yes 25 사진PATH
LOC_CD VARCHAR2(20 BYTE) Yes 26 지역코드
INS_USER_ID VARCHAR2(20 BYTE) Yes 27 입력자ID
INS_YMDHMS TIMESTAMP(6) Yes 28 입력일시
MOD_USER_ID VARCHAR2(20 BYTE) Yes 29 작업자ID
MOD_YMDHMS TIMESTAMP(6) Yes 30 수정일시
INS_GYMDHMS TIMESTAMP(6) WITH TIME ZONE Yes 31 입력일시_현지
MOD_GYMDHMS TIMESTAMP(6) WITH TIME ZONE Yes 32 수정일시_현지
TIMEZONECD VARCHAR2(20 BYTE) Yes 33 TIMEZONE코드