# SQL 구문은 다음과 같은 순서로 실행된다
# FROM -> JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
> 3 SELECT emp_id, name
1 FROM employees
2 WHERE department = 'A11'
4 ORDER BY manager;
Application으로부터 SQL이 전달되면 Parser
-> Optimizer
-> Executor
-> Storage Engine
을 거쳐 query가 실행되고 데이터를 반환하게 된다.
💡 Query Cache는 원래 Parser전에 실행되어 이전에 실행한 query의 경우 바로 반환할 수 있도록 하는 캐시 역할을 했지만, 데이터 변경에 따라 성능 저하와 버그를 유발해서 MySQL 8.0에서 제거되었다.
Parser
💡 FROM 절에 정의되지 않은 column을 WHERE, GROUP BY, HAVING, SELECT, ORDER BY에서 사용할 경우 에러가 발생한다
💡 SELECT 절에 없는 column은 ORDER BY에서 사용 가능하다 (RDBMS는 데이터를 메모리에 load할 때 row 단위로 모든 column을 가져오기 때문이다)
Optimizer
💡 CBO(Cost Based Optimizer): 가장 최소한의 비용(ex. I/O, CPU연산, 메모리 등)이 소모되는 접근 경로를 결정한다
💡 RBO(Rule Based Optimizer): 규칙 기반(ex. 인덱스가 존재하면 무조건 사용)으로, 미리 정해진 우선 순위 규칙에 따라 접근 경로를 결정한다
Executor
Storage Engine