SQL은 어떻게 실행될까?

Yeon Seong Hwang·2024년 4월 28일
1

SQL

목록 보기
3/4

📌 SQL Execution

mysql-architecture


# 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

  • SQL의 문법에 오류가 없는지 확인한다
  • 테이블과 column이 존재하는지 확인한다
  • DB 내부적으로 구문을 처리할 수 있도록 parser tree를 생성한다

💡 FROM 절에 정의되지 않은 column을 WHERE, GROUP BY, HAVING, SELECT, ORDER BY에서 사용할 경우 에러가 발생한다
💡 SELECT 절에 없는 column은 ORDER BY에서 사용 가능하다 (RDBMS는 데이터를 메모리에 load할 때 row 단위로 모든 column을 가져오기 때문이다)

Optimizer

  • 최적의 루트를 계산해서 query가 실행될 수 있도록 하며, MySQL의 경우 기본적으로 CBO 방식으로 동작한다

💡 CBO(Cost Based Optimizer): 가장 최소한의 비용(ex. I/O, CPU연산, 메모리 등)이 소모되는 접근 경로를 결정한다
💡 RBO(Rule Based Optimizer): 규칙 기반(ex. 인덱스가 존재하면 무조건 사용)으로, 미리 정해진 우선 순위 규칙에 따라 접근 경로를 결정한다

Executor

  • optimizer 명령을 storage engine에 전달한다

Storage Engine

  • executor의 요청에 따라 데이터를 디스크에 read/write한다

🔗 참고자료

profile
온 몸으로 기억하기 위해 기록합니다. 🌱

0개의 댓글