MySQL 의 서버는 사람의 머리 역할을 담당하는 MySQL 엔진 과 손발 역할을 담당하는 스토리지 엔진 으로 구분된다. 일반적으로 사용하는 InnoDB 엔진은 스토리지 엔진의 한 종류이다.

MySQL 서버의 전체 구조

MySQL 서버의 전체 구조

외부에서 받아온 쿼리문을 MySQL 엔진에서 효율적으로 처리하는 방법을 고안하고 실행한다. MySQL 엔진 내의 쿼리 실행기에서는 실제로 쿼리문을 동작하는데, 스토리지 엔진에 데이터를 처리하기 위해서 핸들러 API 로 통신한다. 핸들러 API 만 사용한다면 어느 스토리지 엔진을 사용하더라도 동일하게 사용할 수 있다.

MySQL 엔진 <-- (핸들러 API) --> 스토리지 엔진

클라이언트로부터 쿼리 실행 요청이 들어오면 다음과 같은 과정을 거친다.

쿼리 실행 구조

쿼리 실행 구조

InnoDB 스토리지 엔진 아키텍처

InnoDB 구조

InnoDB 구조

InnoDB 는 MySQL 의 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공하여 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어나다. 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링 되어 저장되기 때문에 프라이머리 키를 사용하여 조회할 경우 처리 속도가 매우 빠르다. 다른 스토리지 엔진과는 달리 외래키도 지원한다. InnoDB 에서 외래키는 부모 테이블과 자식 테이블 모두 해당 컬럼에 인덱스가 필요하다.