데이터베이스(DB)/MySQL

[MySQL] MyISAM vs InnoDB 비교

송기동 2025. 8. 25. 18:25
728x90

MySQL에서 데이터를 저장하고 관리하는 방식은 스토리지 엔진에 따라 달라집니다.
대표적인 엔진인 MyISAMInnoDB는 목적과 환경에 따라 선택이 달라져야 하며, 성능과 안정성 측면에서 큰 차이가 있습니다.
이번 글에서는 두 엔진의 특징, 장단점, 그리고 선택 가이드를 정리했습니다.

 

1. MyISAM과 InnoDB 기본 구조 비교

항목  MyISAM  InnoDB
트랜잭션 없음 있음 (ACID 지원)
잠금 단위 테이블 단위 행 단위
외래키(FK) 불가 가능
크래시 복구 취약 자동 복구
읽기 성능 순수 읽기 최적 읽기+쓰기 균형 최적
쓰기 동시성 낮음 높음
인덱스 구조 비클러스터드 PK 기반 클러스터드
FULLTEXT 가능 5.6+ 지원
데이터 캐시 OS 캐시 의존 버퍼 풀 내장

2. MyISAM 엔진 특징

장점

- 순수 읽기 성능 우수, 통계 조회와 분석 테이블에 적합

- 구조가 단순하여 백업과 관리가 용이

- FULLTEXT 검색 지원

- COUNT(*) 즉시 응답

단점

- 트랜잭션 미지원, 롤백 불가

- 테이블 단위 잠금으로 동시 쓰기 취약

- 외래키 지원 불가, 데이터 무결성 보장 어려움

- 서버 크래시 시 테이블 손상 가능


3. InnoDB 엔진 특징

장점

- 트랜잭션 지원, ACID 준수, 롤백 가능

- 행 단위 잠금으로 동시 쓰기 우수

- 외래키 지원, 데이터 무결성 보장

- 서버 크래시 시 자동 복구 가능

- 버퍼 풀 캐시로 성능 안정적

단점

- 단순 읽기 성능은 MyISAM보다 낮을 수 있음

- 버퍼 풀 등 메모리 설정 필요

- 데드락 가능, 트랜잭션 설계 주의 필요

- FULLTEXT 검색은 버전 제한 존재


4. 선택 가이드

InnoDB 사용 추천

- 금융, 주문, 회원 정보 등 데이터 정합성이 중요한 경우

- 동시 쓰기가 많은 게시판, 로그 테이블

- 장애 대비 및 자동 복구 필요

MyISAM 사용 고려

- 읽기 중심, 분석/통계용 테이블

- FULLTEXT 검색 단순 활용 시

- 장애 발생 시 복구가 큰 문제가 되지 않을 경우


5. 운영·성능 팁

InnoDB

- innodb_buffer_pool_size를 메모리 50~70%로 설정

- PK 기반 클러스터드 인덱스 활용

- 트랜잭션 단위 최소화, 갭락과 데드락 방지

MyISAM

- 대량 INSERT 전 DISABLE KEYS, 후 ENABLE KEYS

- 동시 INSERT는 홀 공간이 없을 때 효율적

- 서버 장애 시 myisamchk로 복구 가능


결론

- 기본 엔진은 InnoDB가 권장됩니다.

- 예외적으로 읽기 전용·검색 특화 테이블에만 MyISAM 사용 가능.

- 엔진 선택 시 목적과 환경을 고려하고, 백업과 복구 전략까지 포함한 운영 방안을 마련해야 합니다.

728x90