옵티마이저 (Optimizer)
옵티마이저는 사용자가 질의한 SQL 문에 대해 최적의 실행 방법을 결정하는 역할을 수행한다.
이러한 최적의 실행 방법을 실행계획(Execution Plan)이라고 한다.
규칙기반 옵티마이저(RBO, Rule Based Optimizer)
규칙기반 옵티마이저는 규칙(우선 순위)을 가지고 실행계획을 생성한다.
규칙기반 옵티마이저 규칙
*순위가 숫자가 낮을수록 높은 우선 순위이다
규칙 1, Single row by rowid
ROWID를 통해 테이블에서 하나의 행을 액세스 하는 방식이다.
ROWID는 행이 포함된 데이터 파일, 블록 등의 정보를 가지고 있기 때문에 다른 정보를 참조하지 않고도 바로 원하는 행을 액세스할 수 있다. 하나의 행을 액세스하는 가장 빠른 방법이다.
규칙 4, Single row by unique or primary key
유일 인덱스(Unique Index)를 통해서 하나의 행을 액세스하는 방식이다.
이 방식은 인덱스를 먼저 액세스하고 인덱스에 존재하는 ROWID를 추출하여 테이블의 행을 액세스한다.
비용기반 옵티마이저(CBO, Cost Based Optimizer)
테이블 및 인덱스 등의 통계 정보를 활용해여 SQL문을 실행하는데 소요될 처리시간 및 CPU, I/O 지원량 등을 계산하여 가장 효율적인 것으로 예상되는 실행계획을 선택하는 옵티마이저를 말한다. 계산된 소용비용에 따라 인덱스가 존재하더라도 전체 테이블 스캔이 유리하다고 판단할 수도 있다.
실행계획 (Excution Plan)
실행계획이란 SQL에서 요구한 사항을 처리학 위한 절차와 방법을 의미한다.
실행계획이 달라지면 실행시간(성능)은 서로 다를 수 있지만 결과가 달라지지는 않는다.
실행계획 정보의 구성요소
- 최적화 정보: 옵티마이저가 실행계획의 각 단계마다 예상되는 비용 사항을 표시한 것으로, 비용(Cost), 건수(Cardinality), 메모리양(Bytes)에 대한 정보가 있다.
- 실행순서: 실행계획을 읽는 순서는 위에서 아래로, 안에서 밖으로 읽는다.
SQL 처리 흐름도 (Access Flow Diagram)
SQL 처리 흐름도이란 SQL의 내부적인 처리 절치(실행계획)를 시각적으로 표현한 도표이다.
SQL 처리 흐름도만 보고 실행 시간을 알 수는 없다.
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] SQL 최적화 기본 원리 - 조인 수행 원리 (0) | 2023.09.01 |
---|---|
[SQLD] SQL 최적화 기본 원리 - 인덱스 기본 (0) | 2023.08.31 |
[SQLD] SQL 활용 - 절차형 SQL (0) | 2023.08.31 |
[SQLD] SQL 활용 - DCL(Data Control Language) (0) | 2023.08.31 |
[SQLD] SQL 활용 - 윈도우 함수 (0) | 2023.08.31 |