티스토리 뷰

같은 쿼리더라도 어떻게 동작할지는 매우 다양하다.

이런 선택지 중에서 최적인 방법을 경적하는 것이 옵티마이저이다.

 

9.1 개요

실행 계획을 이해하면 비효율적인 부분을 찾아서 더 최적의 계획을 수립할 수 있다. 이해해보자

(1) 쿼리 실행 절차

크게 3가지이다.

1. 요청된 SQL문을 parsing해서 SQL parse tree생성

2. parse tree를 확인하면서 어떤 테이블부터 읽고 어떤 인덱스를 이용할지 결정. 다음 내용을 처리한다.

- 불필요한 조건 제거 및 복잡한 연산의 단순화

- 테이블 조인의 경우 어떤 테이블부터 읽을지 결정

- 각 테이블에 사용된 조건과 인덱스 통계 정보(?)를 이용해 사용할 인덱스 결정

- 가져온 레코드들을 임시 테이블에 저장하고 다시 한번 가공해야 하는지 결정

3. 결정된 읽기 순서나 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져온다.

- MySQL 엔진과 스토리지 엔진이 동시에 참여해서 수행

 

(2) 옵티마이저 종류

두뇌.

Cost-based Optimizer(CBO), Rule-based Optimizer(RBO) 2가지로 나뉨

RBO: 고정된 우선순위. 다양한 유스케이스에 적용이 거의 불가능해서 사용되지 않음.

CBO: 여러가지 가능한 실행 계획을 만들고 각 작업의 unit cost와 대상 테이블의 예측된 통계정보로 실행 계획별 코스트를 계산, 최소 코스트를 가진 실행 계획으로 쿼리를 수행한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함