옵티마이저
사용자가 만든 질의으로 최적의 실행 방법(=실행계획)을 결정하는 알고리즘
규칙기반 옵티마이저(RBO)
일정한 규칙으로 실행 계획을 생성하는 옵티마이저
순서(조인 칼럼 인덱스의 존재가 결정 기반)
- 조인 칼럼의 인덱스가 양쪽에 있을 경우 → 우선순위 먼저
- 조인 칼럼의 인덱스가 한족에 있을 경우 → 인덱스 없는 것 먼저(NL join)
- 조인 칼럼의 인덱스가 둘다 없을 경우 → FROM절 뒤에 나열된 테이블이 먼저(Merge Sort join)
- 우선 순위가 동일한 경우 → FROM절에 나열된 테이블의 역순
비용 기반 옵티마이저(CBO)
비용(예상 소요 시간, 자원 사용량)이 가장 적은 실행 계획을 선택하는 알고리즘
모듈 종류
- 질의 변환기
- 사용자가 작성한 SQL문을 보다 처리하기 용이하게 변환
- 대안 계획 생성기
- 동일한 결과를 생성하는 다양한 대안 계획 생성.
- 많으면 많을수록 최적화 힘듬 → 옵티마이저에서 대안계획 수 제한
- 최적의 대안계획 포함 안할수도 있음
- 비용 예측기
- 대안 계획의 비용을 예측.
- 인덱스 사용이 전체테이블 스캔보다 비용이 크다면 전체 테이블을 스캔하는 식으로 전개
- 동일 SQL문도 비용 예측이 다를 수 있음
실행계획
실행계획(처리방법)과 성능(실행시간)은 다를 수 있음
인덱스
- B-TREE 인덱스
- 브랜치 블록(분기), 리프 블록(인덱스 구성 칼럼값)