개발자가 SQL을 실행하면 파싱(Parsing)을 실행해서 SQL의 문법 검사 및 구문 분석을 수행한다.
구문 분석이 완료되면, 옵티마이저가 규칙 기반 혹은 비용 기반으로 실행 계획을 수립한다.
실행 수립이 완료되면, 최종적으로 SQL을 실행하고, 실행이 완료되면 데이터를 인출(Fetch)한다.
옵티마이저 엔진
옵티마이저 | 설명 |
---|---|
Query Transformer | - SQL문을 효율적으로 실행하기 위해서 옵티마이저가 변환한다. - SQL이 변환되어도 그 결과는 동일하다. |
Estimator | - 통계 정보를 사용해서 SQL 실행 비용을 계산한다 - 총 비용은 최적의 실행 계획을 수립하기 위해서이다. |
Plan Generator | SQL을 실행할 실행 계획을 수립한다. |
/*+ RULE */
를 사용해서 옵티마이저에서 규칙 기반 옵티마이저로 실행하도록 알려준다.우선순위 | 설명 |
---|---|
1 | ROWID를 사용한 단일 행인 경우 |
2 | 클러스터 조인에 의한 단일 행인 경우 |
3 | 유일하거나 기본키(Primary Key)를 가진 해시 클러스터 키에 의한 단일 행인 경우 |
4 | 유일하거나 기본키(Primary Key)에 의한 단일 행인 경우 |
5 | 클러스터 조인인 경우 |
6 | 해시 클러스터 조인인 경우 |
7 | 인덱스 클러스터 키인 경우 |
8 | 복합 칼럼 인덱스인 경우 |
9 | 단일 칼럼 인덱스인 경우 |
10 | 인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우 |
11 | 인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우 |
12 | 정렬-병합(Sort-Merge) 조인인 경우 |
13 | 인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우 |
14 | 인덱스가 구성된 칼럼에서 ORDER BY를 실행하는 경우 |
15 | 전체 테이블을 스캔(FULL TABLE SCAN)하는 경우 |
이 게시물은 "SQL 개발자 이론서+기출문제(이기적)"을 참고하여 작성되었습니다. :)
당신,, 누구시길래 이런 고오급 정리를 해주셨는지요,,, 모든 시리즈 다 잘 읽고 갑니다 :) 감사해요!!