MySQL 서버에서 쿼리가 실행되는 과정은 크게 세 단계로 나눌 수 있다.
두 번째 단계는 첫 번째에서 분리된 파스트리를 참조하면서 다음을 수행한다.
두 번째 단계는 **“최적화 및 실행 계획 수립” 단계이며, MySQL 서버의 “옵티마이저”에서 처리한다. 또한 두 번째 단계가 완려되면 쿼리의 “실행 계획”**이 만들어진다.
세 번째 단계는 실행 계획대로 스토리지 엔진에 레코드를 읽어오도록 요청하고, MySQL 엔진에서는 받은 레코드를 조인하거나 정렬하는 작업을 수행한다.
첫 번째 두 번째 작업은 MySQL 엔진에서, 세 번째 작업은 스토리지 엔진과 MySQL 엔진이 동시에 참여한다.
데이터베이스 서버에서 두뇌와 같은 역할을 담당하는 옵티마이저는 다음과 같은 종류로 나뉜다
비용 기반 최적화(Cost-based optimizer, CBO) 방법
쿼리를 처리하기 위한 여러 가지 가능한 방법을 만들고, 각 단위 작업의 비용(부하) 정보와 대상 테이블의 예측된 통계 정보를 이용해 실행 계획별 비용을 산출한다.
이렇게 산출한 비용이 최소로 소요되는 처리 방식을 선택해 최종적으로 쿼리를 실행한다.
규칙 기반 최적화(Rule-based optimize, RBO) 방법
대상 테이블의 레코드 건수나 선택도 등을 고려하지 않고 옵티마이저에 내장된 우선순위에 따라 실행 계획을 수릭하는 방식
통계 정보를 사용하지 않기 때문에 같은 쿼리에 대해 항상 같은 실행 방법을 만들어 낸다.
하지만 사용자의 데이터는 매우 다양하기 때문에 이 방법은 오래전부터 많은 DBMS에서 사용하지 않는다.