데이터베이스/0 + MySQL

[MySQL] 쿼리 실행 구조

힘들면힘을내는쿼카 2024. 12. 28. 01:36
728x90
반응형

쿼리 실행 구조

쿼리를 실행하는 관점에서 MySQL의 구조를 간략하게 그림으로 표현하면 위와 같습니다.

 

이를 기능별로 나눠서 표현하면 아래와 같습니다.

  • 쿼리 파서
  • 전처리기
  • 옵티마이저
  • 실행엔진
  • 핸들러(스토리지엔진)

 

기능들에 대해서 상세하게 알아봅시다~!

 

쿼리 파서

쿼리 파서는 사용자 요청으로 들어온 쿼리 문장을 토큰으로 분리하여 트리 형태의 구조로 만들어 내는 작업을 의미 합니다.

쿼리 문장의 기본 문법 오류를 발견하고 사용자에게 오류 메시지를 전달합니다.

 

참고

토큰이란 MySQL이 인식할 수 있는 최소 단위의 어휘나 기호를 의미 합니다.

 

전처리기

파서 과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에 구조적인 문제점이 있는지 확인합니다.

각 토큰을 테이블 이름이나 컬럼 이름, 또는 내장 함수와 같은 개체를 매핑하여 해당 객체의 존재 여부와 객체의 접근 권한 등을 확인하는 과정을 수행 합니다.

실제 존재하지 않거나 권한상 사용할 수 없는 개체의 토큰을 필터링 합니다.

 

옵티마이저(DBMS의 Brain)

옵티마이저란 사용자의 요청으로 들어온 쿼리 문장을 저렴한 비용으로 가장 빠르게 처리할지를 결정하는 역할을 담당 합니다.

 

실행엔진

옵티마이저가 두뇌라면 실행 엔진과 핸들러는 손과 발에 비유할 수 있습니다.

쉽게 회사로 설명하면, 옵티마이저는 회사의 경영진, 실행 엔진은 중간 관리자, 핸들러는 각 업무의 실무자로 비유할 수 있습니다~^^

 

옵티마이저가 group by를 처리하기 위해 임시 테이블을 사용하기로 결정했을 때 과정

  1. 실행 엔진이 핸들러에게 임시 테이블을 만들라고 요청
  2. 다시 실행 엔진은 where 절에 일치하는 레코드를 읽어오라고 핸들러에게 요청
  3. 읽어온 레코드들을 1번에서 준비한 임시 테이블로 저장하라고 다시 핸들러에게 요청
  4. 데이터가 준비된 임시 테이블에서 필요한 방식으로 데이터를 읽어오라고 핸들러에게 다시 요청
  5. 최종적으로 실행 엔진은 결과를 사용자나 다른 모듈로 넘김

 

핸들러(스토리지 엔진)

MySQL 서버의 가장 밑단에서 MySQL 실행 엔진의 요청에 따라 데이터를 디스크로 저장하고 디스크로부터 읽어 오는 역할을 담당합니다.

핸들러는 결국 스토리지 엔진을 의미하며, MyISAM 테이블을 조작하는 경우에는 핸들러가 MyISAM 스토리지 엔진이 되고, InnoDB 테이블을 조작하는 경우에는 핸들러가 InnoDB 스토리지 엔진이 됩니다.

 

참고

 

Real MySQL 8.0 (1권) | 백은빈 - 교보문고

Real MySQL 8.0 (1권) | MySQL 서버를 활용하는 프로젝트에 꼭 필요한 경험과 지식을 담았습니다!《Real MySQL 8.0》은 《Real MySQL》을 정제해서 꼭 필요한 내용으로 압축하고, MySQL 8.0의 GTID와 InnoDB 클러스

product.kyobobook.co.kr

 

 

 

728x90
반응형