[TIL 2021.09.23] Real MySQL: 실행 계획

Kyu·2021년 9월 23일
0

TIL

목록 보기
256/322

Today I Learned
실행 계획 개요

쿼리 실행 절차

  1. SQL 문장을 잘게 쪼개 MySQL 서버가 이해할 수 있는 수준으로 분리.
  2. SQL의 파싱 정보(파스 트리)를 확인하며 어떤 테이블부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택.
  3. 두번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져옴.

1번 단계

1번을 SQL Parsing 이라고 한다. MySQL 서버의 SQL Parse라는 모듈이 처리한다.

1번 단계에서 문법 오류가 걸러지고, "SQL 파스 트리"가 만들어진다.

MySQL 서버는 SQL 문장 그 자체가 아니라 SQL 파스 트리를 이용해 쿼리를 실행.

2번 단계

2번 단계에서 SQL 파스 트리를 참조해 수많은 처리를 한다.

최적화 및 실행 계획 수립의 단계임, MySQL 서버의 옵티마이저에서 처리한다.

2번 단계가 완료되면 쿼리의 실행 계획이 만들어진다.

1,2번 단계는 거의 MySQL 엔진에서 처리하고, 3번 단계에서는 MySQL 엔진과 스토리지 엔진이 동시에 참여해서 처리한다.

MySQL 서버 엔진과 스토리지 엔진

  • 서버 엔진: 클라이언트가 쿼리를 요청할 때, 1번 2번 단계(쿼리 파싱)를 해서 스토리지 엔진에 데이터를 요청한다.

  • 스토리지 엔진: 물리적 저장장치를 데이터에 불러오는 역할을 한다.

스토리지 엔진이 중요. 실제로 데이터와 맞닿아 있는 것은 스토리지 엔진이기 때문에 검색해보면 MyISAM 과 InnoDB 의 차이점 같이 스토리지 엔진의 비교를 많이 볼 수 있다.

두 스토리지 엔진의 간단한 차이는 MyISAM 은 테이블 단위의 락이 걸려서 저사양 컴퓨터에 어울리고 InnoDB는 레코드 단위의 락이 걸려 ACID 트랜잭션을 지원한다. InnoDB는 데이터를 불러오는 게 비교적 느리다. MySQL 8 부터는 MyISAM 을 지원하지 않는다.

profile
TIL 남기는 공간입니다

0개의 댓글