MySQL을 공부하다보니 계속 InnoDB엔진과 MyISAM 엔진이 등장하는데, 궁금해서 간단하게만 정리해보았다.
MySQL 엔진 아키텍처
먼저 MySQL 서버는 MySQL 엔진과 스토리지 엔진으로 나뉜다.
MySQL엔진은 요청된 SQL 문장을 분석하거나, 최적화하는 등 DBMS의 두뇌 역할을 한다고 보면 되고,
스토리지 엔진은, 실제 데이터를 디스크 스토리지에 저장하거나, 디스크 스토리지로부터 읽어오는 역할을 전담한다.
InnoDB 엔진이나, MyISAM 엔진은 둘 중 스토리지 엔진에 해당한다.
MyISAM엔진과 InnoDB엔진을 간단히 비교하자면,
- 트랜잭션 처리가 필요하고, 대용량의 데이터를 다루기 위해서는 InnoDB
- 트랜잭션 처리가 필요없고, Read only 기능이 많이 필요할수록 MyISAM
조회가 많은 서비스는 MyISAM, 데이터 변화가 많은 서비스는 InnoDB가 적합하다고 할 수 있다.
위와 같은 기준이 생기는 이유는 락 부분에서 자세히 설명할 것이지만 현재까지 배운 내용으로 알 수 있는 내용들만 간단히 풀어서 보자.
InnoDB
MyISAM과 비슷하지만, 트랜잭션, row-level locking, 외래키 등 많은 기능을 지원한다.
따라서 대용량 데이터를 처리 시 최대의 퍼포먼스를 내도록 설계되었다.
(내부적으로도 왜 높은 퍼포먼스가 필요한 서비스에 적합한지는 InnoDB엔진 아키텍처 부분에서 다룰 예정)
MyISAM
transaction-safe 하지 않은 테이블을 관리한다.
풀텍스트 인덱스를 지원하며, SELECT 명령 시 빠른 속도를 지원한다.
따라서 조회 기능이 많을수록 효율적일 수 있다.
하지만 InnoDB와 다르게, row level Locking을 지원하지 못한다.
즉 CRUD 시 해당 테이블 전체에 Lock이 걸리므로, row가 커질수록 CRUD 속도가 느려진다.
막상 조사해보니 두 엔진간 차이가 크다기보단
뭔가 MyISAM 엔진 같은 경우에는 잘 이용 안할줄 알았는데 각자 나름대로의 특성이 있다는 점에 조금 놀랐다.
'Database' 카테고리의 다른 글
[MySQL] 인덱스와 잠금, MySQL의 격리 수준 (0) | 2025.01.10 |
---|---|
[MySQL] InnoDB 스토리지 엔진 잠금 (1) | 2025.01.07 |
[MySQL] MySQL 엔진의 잠금 (1) | 2025.01.04 |
[MySQL] InnoDB (2) - 버퍼 풀과 LRU (4) | 2024.12.30 |
[MySQL] InnoDB 엔진 (1) (1) | 2024.12.27 |