파게로그

optimizer 종류 본문

콤퓨타 왕기초/SQLD/JDBC/Oracle DB

optimizer 종류

파게 2021. 3. 22. 15:30

optimizer의 실행 방법

  1. SQL 개발자가 SQL을 실행하면, parsing을 통해 SQL의 문법 검사 및 구문 분석을 수행
  2. optimizer가 규칙 기반 혹은 비용 기반으로 SQL execution plan 수립
  3. optimizer는 기본적으로 통계 정보를 활용해서 최적의 실행 계획을 수립하는 비용 기반 optimizer를 사용
  4. 최종적으로 SQL을 실행하고 실행이 완료되면 데이터를 인출(fetch)

 

optimizer engine

  • query transformer: SQL문을 효율적으로 실행하기 위해서 optimizer가 변환함. SQL이 변환되어도 그 결과는 동
  • estimator: 통계 정보를 사용해서 SQL 실행 비용을 계산. 총 비용은 최적의 실행 계획을 수립하기 위함임
  • plan generator: SQL execution plan을 수립

 

rule base optimizer (우선순위 별 설명)

  1. ROWID를 사용한 단일 행인 경우
  2. 클러스터 조인에 의한 단일 행인 경우
  3. 유일하거나 PK를 가진 해시 클러스터 키에 의한 단일 행인 경우
  4. 유일하거나 PK에 의한 단일 행인 경우
  5. 클러스터 조인인 경우
  6. 해시 클러스터 조인인 경우
  7. 인덱스 클러스터 키인 경우
  8. 복합 칼럼 인덱스인 경우
  9. 단일 칼럼 인덱스인 경우
  10. 인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우
  11. 인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우
  12. 정렬-병합(sort merge) 조인인 경우
  13. 인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우
  14. 인덱스가 구성된 칼럼에서 ORDER BY를 실행하는 경우
  15. 전체 테이블을 스캔(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