MySQL 스토리지 엔진 비교

MyISAM vs InnoDB
특징 | MyISAM | InnoDB |
---|---|---|
데이터 구조 | 테이블, 인덱스, 블록 | 테이블, 인덱스, 블록 |
트랜잭션 지원 | 없음 | 있음 |
동시성 지원 | 낮음 | 높음 |
성능 | 단일 CPU, 단일 스레드 환경에서 읽기 성능이 우수 | CPU, 스레드가 많은 환경에서 읽기, 쓰기 성능이 우수 |
기능 | Full-Text 검색, CSV 파일 import / export | Full-Text 검색, CSV 파일 import / export, 복구 기능 지원 |
안정성 | 테이블 단위의 잠금으로 인해 병렬 처리에 어려움 | 테이블과 페이지 단위의 잠금으로 병렬 처리에 유리 |
MyISAM
과거부터 MySQL의 기본 스토리지 엔진 으로, 간단하고 가볍다는 장점이 있다.
트랜잭션을 지원하지 않기 때문에 데이터 무결성이 중요하지 않은 환경에서 사용하기 좋다.
또한, 단일 CPU, 단일 스레드 환경에서 읽기 성능이 우수하다.
인덱스 차원에서는 MyISAM 구조가 간단하기 때문에 InnoDB 보다 유리할 수 있다.
InnoDB
MyISAM을 대체하기 위해 개발된 스토리지 엔진으로, ACID 트랜잭션을 지원한다.
데이터 무결성이 중요한 환경에서 사용하기 좋으며,
CPU, 스레드가 많은 환경에서 읽기, 쓰기 성능이 우수하다. 또한, 복구 기능을 지원하여 데이터 손실에 대비할 수 있다.
각 엔진별 사용하면 좋은 예시
병렬처리 / 데이터 무결성 중요 --> InnoDB 단일 스레드 처리 / 데이터 무결성은 중요하지 않지만 많은 데이터를 읽는 행위가 많을 경우 --> MyISAM
게시판, 블로그와 같은 웹사이트 : MyISAM
온라인 쇼핑몰, 금융 서비스와 같은 대규모 시스템 : InnoDB
데이터 분석, 머신 러닝과 같은 고성능 처리(병렬 처리 중요) : InnoDB
느낀점
RealMySQL 에서도 강조했던 내용이지만, 현대 시스템들은 대부분 InnoDB를 사용하기를 권장하고 있다.
테이블 단위의 잠금을 하는 MyISAM에서는 사용자가 다소 많은 시스템에서는 적합하지 않다. (병렬처리가 구조적으로 취약)
사실상 구조적인 차이를 아는 것 보단, MyISAM와 InnoDB를 비교했을 때, 락의 단위가 페이지 단위인지, 테이블 단위인지부터 야기되는 부수효과들 뿐이다.
MyISAM - 테이블 단위 잠금
단일 스레드에서 유리
읽기 성능이 우수(읽을때도 테이블 단위로 잠그기 때문에)
트랜잭션을 지원하지 않는다.
InnoDB - 페이지 단위 잠금
병렬 처리에 유리
데이터 무결성을 보장해준다.