파게로그
optimizer 종류 본문
optimizer의 실행 방법
- SQL 개발자가 SQL을 실행하면, parsing을 통해 SQL의 문법 검사 및 구문 분석을 수행
- optimizer가 규칙 기반 혹은 비용 기반으로 SQL execution plan 수립
- optimizer는 기본적으로 통계 정보를 활용해서 최적의 실행 계획을 수립하는 비용 기반 optimizer를 사용
- 최종적으로 SQL을 실행하고 실행이 완료되면 데이터를 인출(fetch)
optimizer engine
- query transformer: SQL문을 효율적으로 실행하기 위해서 optimizer가 변환함. SQL이 변환되어도 그 결과는 동
- estimator: 통계 정보를 사용해서 SQL 실행 비용을 계산. 총 비용은 최적의 실행 계획을 수립하기 위함임
- plan generator: SQL execution plan을 수립
rule base optimizer (우선순위 별 설명)
- ROWID를 사용한 단일 행인 경우
- 클러스터 조인에 의한 단일 행인 경우
- 유일하거나 PK를 가진 해시 클러스터 키에 의한 단일 행인 경우
- 유일하거나 PK에 의한 단일 행인 경우
- 클러스터 조인인 경우
- 해시 클러스터 조인인 경우
- 인덱스 클러스터 키인 경우
- 복합 칼럼 인덱스인 경우
- 단일 칼럼 인덱스인 경우
- 인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우
- 인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우
- 정렬-병합(sort merge) 조인인 경우
- 인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우
- 인덱스가 구성된 칼럼에서 ORDER BY를 실행하는 경우
- 전체 테이블을 스캔(full table scan)하는 경우
cost base optimizer
- 오브젝트 통계 및 시스템 통계를 사용해서 총 비용을 계산
- 총 비용이 적은 쪽으로 실행 계획을 수립
- 통계 정보가 부족한 경우 성능 저하가 발생할 수 있음
- 총 비용: SQL문을 실행하기 위해서 예상되는 소요 시간 혹은 자원의 사용량
hint
SELECT /*+ RULE */ * FROM EMP
WHERE ROWID = 'AAAHYhAABAAALNJAAN';
- 위 경우, optimizer에서 rule base optimizer로 실행하도록 알려줌
'콤퓨타 왕기초 > SQLD/JDBC/Oracle DB' 카테고리의 다른 글
[SQL] WHERE절 (0) | 2021.03.31 |
---|---|
[SQL] 기본적인 문법 (0) | 2021.03.31 |
optimizer와 실행 계획 (0) | 2021.03.22 |
table partition (0) | 2021.03.22 |
window function (0) | 2021.03.22 |
Comments