
사용자의 요청으로 들어온 명령(query)을 MySQL이 인식할 수 있는 최소 단위의 어휘나 기호로 분리해, 트리 형태의 구조로 만들어 내는 작업을 한다.
명령어 오류는 이 과정에서 발견, 사용자에게 에러 메세지를 보낸다.
파서가 만든 트리를 기반으로 query에 문제점이 있는지 확인.
해당 객체의 존재여부, 접근 권한 등을 확인한다.
존재하지 않거나, 권한이 없다면 걸러진다.
DBMS의 두뇌 - 효율적인 처리를 고민한다.
사용자가 보낸 query를 저렴한 비용으로 가장 빠르게 처리할 지 결정하는 역할.
옵티마이저가 더 나은 선택을 할 수 있게 유도하는 것이 MySQL 성능 최적화 과정.
DBMS의 손,발 역할
ex) 옵티마이저가 Group BY를 처리하기 위해 임시 테이블을 사용하기로 결정했다면,
실행엔진은
1. 핸들러에게 임시 테이블을 만들라고 요청한다.
2. WHERE 절에 일치하는 레코드를 읽어오라고 핸들러에게 요청한다.
3. 2번에서 읽어온 레코드를 1번에서 준비한 임시 테이블로 저장하라고 요청.
4. 3번에서 만든 임시테이블에 필요한 방식으로 데이터를 읽어오라고 요청.
5. 최종적인 결과물을 사용자나 다른 모듈에 넘긴다.
실행 엔진에 따라
데이터를 디스크로 저장하고
데이터를 디스크에서 읽어오는 역할
MySQL은 해당 과정을 프로세스 기반이 아니라 스레드 기반으로 작동한다.
따라서 여러 개의 요청을 동시에 수행할 수 있다.