Database 엔진 (Storage 엔진)
Database 엔진은 DBMS가 CRUD를 하는데 사용하는 기본 소프트웨어 컴포넌트이다. MySQL에서 사용하는 대표적인 Database 엔진은 두 가지가 있다.
1. MyISAM
MyISAM은 MySQL 5.5 이전까지 기본 Database 엔진이며 비 트랜잭션 세이프 테이블을 관리한다.
(읽는 방법에 대한 이야기가 여러 가지 있는 것 같은데 보통 '마이아이삼'이라고 읽는 듯 하다.)
장점
- Database 모델이 단순하여 SELECT 속도가 빠르다. (읽기 위주의 작업 위주로 필요한 경우 유리하다.)
- 한번에 대용량 데이터를 입력하는 배치성 테이블에서 유리하다.
- FullText 인덱싱, 압축, 공간함수 등 여러 유용한 기능을 제공한다.
단점
- Foreign Key를 지원해주지 않아 데이터 무결성에 대한 보장은 없다.
- Table 단위의 Lock을 사용해 INSERT, UPDATE의 속도가 느리다.
(한 사용자가 INSERT와 같은 작업을 수행 시 다른 사용자는 해당 테이블에 접근할 수 없다.)
- Rollback 및 장애 복구가 불가능하다.
2. InnoDB
가장 많이 사용되는 Database Engine으로 ACID 트랜잭션을 지원하는(트랜잭션-세이프 스토리지 엔진) MySQL의 대표적이고 뛰어난 성능과 장애 복구를 가진 엔진이다.
장점
- Row 단위의 Locking을 사용하므로 INSERT, UPDATE, DELETE에 대한 속도가 빠르다.
- 복구 및 트랜잭션 관리가 필요한 경우 유리하다.
- Order by 등의 정렬 구문이 들어가는 경우 유리하다.
- 대용량의 데이터를 컨르롤하는 경우 유리하다.
단점
- Data와 Index를 캐싱하기 때문에 시스템 자원을 많이 소모한다.
FullText Index를 지원하지 않는다.
MySQL 5.7.3부터 InnoDB에서도 FullText Index를 사용할 수 있다.
지금까지 MySQL을 접하면서 신경쓰지 않았던 부분인데 FullText Index에 대해 정리하면서 공부하게 되었다. 당연하게 여긴 Foreign Key를 MyISAM에서는 지원하지 않는다는 사실을 실습하면서 알게 되었고 매우 놀라웠다...
Reference
MySQL 스토리지 엔진 종류 및 특징
데이터베이스 엔진이란?