옵티마이저란?
- SQL을 가장 빠르고 효율적으로 수행할 수 있게 최적의 처리 경로를 생성해 주는 DBMS 내부의 핵심 엔진이다
- 사용자가 SQL로 결과를 요구하면, 이를 생성하는 데 필요한 처리 경로를 옵티마이저가 통계를 기반으로 자동으로 생성해준다
- 이때 옵티마이저는 각 테이블의 데이터가 어떤 분포로 저장돼 있는지를 참조하고, 데이터를 기반으로 최적의 실행 계획을 수립해준다
옵티마이저의 동작 과정

- SQL 문을 잘게 쪼개서 MySQL Server가 이해할 수 있는 수준으로 분리(파스 트리)한다 → 문법 오류 시 걸러진다
- SQL의 파싱 정보를 통해 어떤 테이블부터 읽을지, 어떤 인덱스를 사용할 지 결정한다
- 옵티마이저가 생성한 실행계획을 SQL 엔진이 실제 실행할 수 있는 코드나 프로시저 형태로 변환한다
- SQL을 실행한다
옵티마이저의 유형
- 규칙 기반 옵티마이저
- 옵티마이저에 내장된 우선순위에 따라 실행 계획을 수립한다
- 통계 정보를 참조하지 않기 때문에 같은 쿼리에 대해서 같은 실행 계획을 만든다
- 현재는 사용하지 않는다
- 비용 기반 옵티마이저
- 쿼리를 처리하기 위한 여러 방법을 만들고, 각각의 통계 정보를 이용해 비용을 산출한다
- 가장 적은 비용이 드는 실행 계획을 선택한다
- 현재 대부분의 RDBMS가 사용하는 방식이다