2024년 4월 10일 작성

MySQL InnoDB와 MyISAM 비교

InnoDB는 transaction과 row-level 잠금을 지원하는 안전한 engine이고, MyISAM은 읽기에 최적화된 단순한 table-level 잠금 engine입니다.

InnoDB vs MyISAM

  • InnoDB와 MyISAM은 MySQL에서 사용되는 대표적인 storage engine이며, 설계 철학과 기능에서 명확한 차이를 보입니다.

  • InnoDB는 MySQL 5.5 이후 기본 engine으로 지정되었으며, 대부분의 enterprise application에 권장됩니다.
    • memory 사용량이 상대적으로 많습니다.
  • MyISAM은 과거 MySQL의 기본 engine이었습니다.
    • full-text search를 MySQL 5.6 이전 version에서 지원했습니다.
    • disk 공간과 memory 사용량이 상대적으로 적습니다.
특성 InnoDB MyISAM
INSERT 성능 상대적으로 느림 빠름
UPDATE 성능 빠름 느림
SELECT 성능 보통 빠름
동시성 처리 우수함 제한적
Memroy 사용량 높음 낮음
Disk 공간 많이 사용 적게 사용
Backup 중 가용성 가능 제한적
충돌 복구 자동, 완전 수동, 불완전
  • application 요구 사항에 따라 적절한 engine을 선택하는 것이 중요합니다.
    • InnoDB는 높은 동시성이 요구되는 OLTP 환경, transaction 처리가 필요한 application, data 무결성이 중요한 system, primary key 기반 검색이 많은 system에서 적합합니다.
    • MyISAM는 읽기 위주의 작업이 대부분인 환경, transaction이 필요 없는 단순한 system, COUNT(*) 같은 통계 쿼리가 많은 경우, 제한된 system resource 환경에서 적합합니다.

Transaction 지원의 차이

  • InnoDB는 ACID 호환 transaction을 완벽하게 지원합니다.
    • COMMIT, ROLLBACK 등 transaction 제어가 가능합니다.
    • 복구 기능이 강력하여 crash 발생 시 data 복구가 가능합니다.
  • MyISAM은 transaction을 지원하지 않습니다.
    • 모든 query는 즉시 실행되고 개별 statement 단위로 처리됩니다.
    • transaction 롤백이 불가능합니다.

잠금 Mechanism의 차이

  • InnoDB는 row-level locking을 지원합니다.
    • 특정 row에만 lock을 설정하여 동시성이 높습니다.
    • 복잡한 OLTP 환경에 적합합니다.
  • MyISAM은 table-level locking만 지원합니다.
    • table 전체에 lock이 적용되어 동시성이 낮습니다.
    • 읽기 위주 작업에는 효율적이지만 쓰기 경합이 발생하면 성능이 저하됩니다.

Foreign Key 제약 조건의 차이

  • InnoDB는 foreign key 제약 조건을 지원합니다.
    • 참조 무결성을 database 수준에서 보장합니다.
    • CASCADE, SET NULL 등의 참조 동작을 지원합니다.
  • MyISAM은 foreign key를 지원하지 않습니다.
    • 참조 무결성을 application logic에서 처리해야 합니다.
    • database 설계가 단순해지는 장점은 있습니다.

성능 특성의 차이

  • InnoDB는 data와 index를 함께 저장하는 clustered index 방식을 사용합니다.
    • primary key 검색이 매우 빠릅니다.
    • buffer pool을 통한 cache 최적화가 뛰어납니다.
  • MyISAM은 data와 index를 별도로 저장합니다.
    • key buffer를 사용하여 index만 cache합니다.
    • COUNT(*) 같은 전체 record count 작업이 빠릅니다.

Data 무결성의 차이

  • InnoDB는 crash recovery 기능을 제공합니다.
    • 비정상 종료 후에도 transaction 일관성을 유지합니다.
    • double-write buffer와 redo log를 통해 data 손상을 방지합니다.
  • MyISAM은 crash 발생 시 data 손상 위험이 있습니다.
    • table 복구가 필요할 수 있으며 data 손실 가능성이 있습니다.
    • 복구 작업에는 REPAIR TABLE 명령이 필요합니다.

목차