스토리지 엔진(Storage Engine)은 DBMS가 데이터를 디스크에 저장하고, 조회하고, 수정하고, 삭제하는 방법을 실제로 구현한 하위 모듈이다. 데이터를 어떻게 저장하고 읽어올지 담당하는 저장소의 내부기술이라고 보면 된다.
MySQL은 다양한 스토리지 엔진을 지원하는 DBMS이다.
| 엔진 이름 | 특징 |
|---|---|
| InnoDB | 디폴트 엔진. 트랜잭션, 외래 키(FK), 롤백, ACID 지원 |
| MyISAM | 빠른 읽기, 트랜잭션 미지원, 테이블 단위 잠금 |
| Memory | 데이터를 메모리에 저장. 매우 빠르지만 휘발성 |
| CSV | 데이터를 CSV 파일로 저장 |
| Archive | 압축된 형태로 저장, 주로 로그 기록용 |
MySQL에서는 CREATE TABLE ... ENGINE-InnoDB; 처럼 명시적으로 엔진을 설정할 수 있다.
스토리지 엔진은 다음과 같은 요소들을 포함한다.
| 구성 요소 | 설명 |
|---|---|
| 데이터 파일 구조 | 데이터를 어떤 구조로 디스크에 저장할지 (예: B-Tree, Hash 등) |
| 인덱싱 방식 | 인덱스를 어떤 방식으로 구현할지 (예: B+ Tree, Full-Text) |
| 버퍼링 | 데이터를 메모리에 캐시해서 성능 향상 |
| 락킹 | 동시성 제어 방식 (행 단위 잠금 vs 테이블 단위 잠금) |
| 트랜잭션 지원 여부 | COMMIT / ROLLBACK 지원 여부 |
| 충돌 복구 | 장애 발생 시 데이터를 어떻게 복구할지 |
| 항목 | InnoDB | MyISAM |
|---|---|---|
| 트랜잭션 | 지원 (ACID) | 미지원 |
| 외래 키 | 지원 | 미지원 |
| 잠금 방식 | 행 단위 잠금 | 테이블 단위 잠금 |
| 성능 | 쓰기 많은 곳에 유리 | 읽기 많은 곳에 유리 |
| 충돌 복구 | 자동 복구 지원 | 수동 복구 도구 필요 |
| 저장 구조 | 클러스터형 인덱스 | 비클러스터형 인덱스 |