1. 옵티마이저 (Optimizer).
- 사용자가 질의한 SQL문에 대해 최적의 실행 방법을 결정하는 DBMS의 소프트웨어
- SQL실행계획(Execution Plan)을 수립하고 SQL을 실행
- 실행계획은 SQL성능에 아주 중요한 역할
- 옵티마이저가 비효율적으로 실행계획을 수립하면 SQL 개발자는 SQL을 개선해야 함
=> 옵티마이저에게 실행 계획을 변경하도록 요청하는 방법 : 힌트(HINT) 사용
* 옵티마이저 ORDERD 힌트 : /*+ ordered use_nl*/ /*+ordered use_merge*/ /*+ordered use_hash*/
1) 옵티마이저 실행
(1) 실행 계획 확인
- 옵티마이저는 SQL 실행계획을 PLAN_TABLE 에 저장 -> 조회해서 실행계획 확인 가능
- TABLE ACCESS FULL -> 테이블을 모두 읽었다는 뜻!
(2) 실행 방법
- 개발자가 sql 실행 -> 파싱(Parsing) -> 옵티마이저가 실행계획 수립 -> SQL 실행 -> 데이터 인출(Fetch)
SQL 문법 검사 및 PLAN_TABLE
구문분석 수행(data dictionary) 오브젝트 통계, 시스템 통계
- 기본적으로 비용 기반 옵티마이저를 사용하여 실행계획 수립(하위 버전 호환용으로 남아있는 규칙기반 옵티마이저...)
* 옵티마이저 엔진
Query Transformer |
- SQL문 효율적으로 실행하기 위해 옵티마이저가 변환함 - SQL이 변환되어도 결과는 동일 |
Estimator |
- 통계 정보를 사용하여 SQL 실행비용 계산 - 총비용은 최적 실행계획 수립하기 위해 계산 |
Plan Generator |
- SQL을 실행할 실행 계획 수립 |
2) 옵티마이저 종류
(1) 규칙기반 옵티마이저
- 실행 계획 수립할 때 15개의 우선순위를 기준으로 실행계획 수립
- 인덱스를 이용한 엑세스 방식이 전체 테이블 엑세스 방식보다 우선순위가 높음
1. |
ROWID 사용한 단일 행 |
9. |
단일 칼럼 인덱스인 경우 |
2. |
클러스터 조인에 의한 단일 행 |
10. |
인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우 |
3. |
유일하거나 기본키를 가진 해시클러스터 키에 의한 단일 행 |
11. |
인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우 |
4. |
유일하거나 기본키에 의한 단일 행 |
12. |
정렬-병합 조인인 경우 |
5. |
클러스터 조인인 경우 |
13. |
인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우 |
6. |
해시 클러스터 조인인 경우 |
14. |
인덱스가 구성된 칼럼에서 ORDER BY 를 실행하는 경우 |
7. |
인덱스 클러스터 키인 경우 |
15. |
전체 테이블 스캔(FULL TABLE SCAN)하는 경우 |
8. |
복합 칼럼 인덱스인 경우 |
|
|
(2) 비용기반 옵티마이저
- SQL 처리하는데 필요한 비용이 가장 적은 실행 계획 선택
- 오브젝트 통계 및 시스템 통계를 사용하여 비용을 계산, 예측함
- 통계정보가 없으면 정확한 비용 예측이 불가능해져 비효율적인 실행계획 생성할 수 있음
'[자격증] SQLD (SQL Developer)' 카테고리의 다른 글
[SQLD][책없이 공부]2과목 03. SQL 최적화의 원리_03 옵티마이저 조인 (0) | 2019.11.27 |
---|---|
[SQLD][책없이 공부]2과목 03. SQL 최적화의 원리_02 인덱스INDEX와 실행계획 (0) | 2019.11.27 |
[SQLD][책없이 공부]2과목 02. SQL 활용_06 테이블 파티션 (0) | 2019.11.26 |
[SQLD][책없이 공부]2과목 02. SQL 활용_05 윈도우 함수 (0) | 2019.11.26 |
[SQLD][책없이 공부]2과목 02. SQL 활용_04 그룹함수 (0) | 2019.11.26 |