최근 SQL 쿼리 최적화에 흥미를 가지던 도중, 더 깊게 공부를 하고 싶다라는 생각이 들어, DB튜닝에 관심을 가지게 되었다. DB튜닝을 본격적으로 알아보기에 앞서, 사전에 사용자가 요청한 SQL문이 실제 DBMS 내부에서 어떠한 절차를 거쳐서 데이터를 전달하는지에 대한 일련의 과정의 파악이 필요하다고 생각했기에 MySQL의 수행 절차에 대해서 정리하고자 한다.

요청한 SQL의 쿼리를 토큰 단위로 나누어 (문법 위주로) 검증하고, MySQL 엔진이 이해할 수 있는 형태인 트리로 변환
SELECT name, age FROM users WHERE age > 30;
위의 SQL이 파서를 거치면..
SELECT → 결과를 조회하라는 명령
name, age → 출력해야할 컬럼
users → 조회할 테이블
WHERE age > 30 → 조건문
SQL의 쿼리의 주석 제거/ORM과 같은 변수 기반 동적 쿼리일 경우, 값 대입/메크로 확장 등을 처리하여 쿼리의 실행 준비를 수행
MySQL의 핵심적인 역할을 수행하는 엔진으로, 파서에서 변환한 트리의 분석(불필요한 조건 삭제, 연산 과정 단순화) 및 테이블의 접근 순서, 인덱스 사용 유무/사용할 인덱스 선택 등의 데이터 습득을 위한 실행 계획을 수립
⭐ 해당 실행 결과를 바탕으로 스토리지엔진으로부터 받아오는 데이터 양이 결정되기에, 실행 계획을 잘 수립해서 데이터 양을 최소화 시키는 것이 정말 중요하다.
옵티마이저로부터 받은 실행 계획을 바탕으로 스토리지 엔진에서 데이터를 가져와서 불필요한 데이터 필터링, 조인, 정렬 등의 사용자에게 전달하기 직전의 추가 작업을 수행