MySQL에서 사용하는 InnoDB는 높은 가용성과 성능을 보장하기 위해 사용되는 다목적 스토리지 엔진이다. MySQL 8.0에서 기본 스토리지 엔진으로 InnoDB를 사용하며, CREATE TABLE 구문에 ENGINE= 옵션을 추가하여 다른 엔진을 사용하도록 설정할 수 있다.
commit, rollback 및 crash recovery가 가능한 트랜잭션을 통해 ACID 모델을 지원하는 DML 오퍼레이션을 제공한다. 자세한 내용은 “InnoDB and ACID Model을 통해 확인할 수 있다.InnoDB 테이블은 디스크에 저장되며, 프라이머리 키에 최적화된 인덱스를 제공한다. 모든 InnoDB 테이블은 프라이머리 키 인덱스를 가지고 있으며, 이들은 모두 clustered index이다. 자세한 내용은 “Clustered and Secondary Indexes”를 통해 확인할 수 있다.Foreign key를 지원한다. Foreign key를 사용한 insert/update/delete와 같은 작업들은 연관된 모든 테이블들에 대해서 제약사항을 위반하지 않는 지 자동 검사된다. 자세한 내용은 “InnoDB and FOREIGN KEY Constraints”를 통해 확인할 수 있다.| 기능 | 지원 여부 |
|---|---|
| B-tree 인덱스 | o 지원 |
| Backup/point-in-time recovery | o 지원 (서버에서 지원함) |
| Cluster 데이터베이스 | x 미지원 |
| Clustered 인덱스 | o 지원 |
| 데이터 압축 | o 지원 |
| 데이터 캐시 | o 지원 |
| 데이터 암호화 | o 지원 (서버에서 지원함) |
| Foreign key | o 지원 |
| Full-text search 인덱스 | o 지원 (MySQL 5.7 이상부터) |
| Geospatial 데이터 타입 | o 지원 |
| Geospatial 인덱싱 | o 지원 (MySQL 5.7 이상부터) |
| Hash 인덱스 | x 미지원 (내부적인 용도로 Adaptive Hash index를 사용하긴 함) |
| Index 캐시 | o 지원 |
| Locking 단위 | Row (행 단위) |
| MVCC | o 지원 |
| Replication (서버 단에서 구현) | o 지원 |
| Storage 제한 | 64TB |
| T-tree 인덱스 | x 미지원 |
| Transaction | o 지원 |
| Data dictionary 에 대한 통계 업데이트 | o 지원 |
MySQL이 지원하는 다른 스토리지 엔진과 InnoDB를 비교하고 싶은 경우에는 이 링크에서 확인하길 바란다.
InnoDB 스토리지 엔진과 관련된 포럼/커뮤니티 사이트는 MySQL Forums::InnoDB 참조