MySQL에서 데이터를 저장하고 관리하는 방식은 스토리지 엔진에 따라 달라집니다.
대표적인 엔진인 MyISAM과 InnoDB는 목적과 환경에 따라 선택이 달라져야 하며, 성능과 안정성 측면에서 큰 차이가 있습니다.
이번 글에서는 두 엔진의 특징, 장단점, 그리고 선택 가이드를 정리했습니다.
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 사용 가능.
- 엔진 선택 시 목적과 환경을 고려하고, 백업과 복구 전략까지 포함한 운영 방안을 마련해야 합니다.
'데이터베이스(DB) > MySQL' 카테고리의 다른 글
| [MySQL] DML - 데이터 삽입/변경/삭제 (INSERT, UPDATE, DELETE) (29) | 2024.02.02 |
|---|---|
| [MySQL] DDL - 테이블 수정/삭제 (ALTER, DROP, TRUNCATE) (28) | 2024.02.02 |
| [MySQL] NULL 처리 (IFNULL, CASE, COALESCE) (27) | 2024.02.01 |
| [MySQL] DDL - 테이블 생성(CREATE) (29) | 2024.01.26 |
| [MySQL] 기본 명령어 (29) | 2024.01.26 |