MyISAM vs InnoDB Storage Engine

| 2015년 12월 21일 | 0 Comments

본 문서는 MySQL 데이터베이스 서버의 MyISAM과 InnoDB에 대해 정리하고, 사용자가 최적의 시스템 운영 및 서비스 제공에 필요한  Database Storage Engine의 선택에 도움이 되길 바랍니다.

1. 스토리지 엔진(storage engine)이란?

데이터베이스 엔진(database engine)
데이터베이스에 대해 데이터를 삽입, 추출, 업데이트 및 삭제하는 데 사용하는 기본 소프트웨어 컴포넌트입니다.
MySQL의 스토리지 엔진은 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 부분을 데이터베이스 엔진을 조작할 때
DBMS 고유의 사용자 인터페이스를 이용하는 방법과 포트번호를 통해 하는 방법을 제공합니다.
대부분의 데이터베이스 관리시스템은 DBMS 의 사용자 인터페이스를 통하지 않고, 사용자가 내장된 엔진과 상호작용을 할 수 있는 자신만의 (API)를 포함하고 있으며,
데이터베이스 엔진이라는 용어는 종종 데이터베이스 서버 또는 데이터베이스 관리 시스템이라는 용어로 사용되기도 하며, 현대의 많은 DBMS는 동일한 DB내의 다중 엔진을 지원합니다.

db-storage-engine
MySQL에서는 서비스 특성에 맞게 다양한 스토리지 엔진을 사용할 수 있다.
MySQL에서 제공하는 스토리지 엔진 : MyISAM, InnoDB, Archive, Memory, NDB, Federated 등
MySQL 에서 제공하는 Storage Engine

mysql > show ENGINES;

db-storage-engine2


2. MyISAM vs InnoDB
 

db-storage-engine1

3. MyISAM 특징

MyISAM은 ISAM(Indexed Sequential Access Method) 의 단점을 보완하기 위해 나온 업그레이드 버젼으로,이 엔진은 비-트랜젝션-세이프(non-transactional-safe) 테이블을
관리합니다.
MyISAM은 다음에 소개하는 InnoDB에 비하여 별다른 기능이 없으므로 데이터 모델 디자인이 단순하다는 것이 장점으로 전체적으로 속도가 InnoDB 보다 빠릅니다.
특히 Select 작업 속도가 빠르므로 읽기 작업에 적합합니다!
Full-text 인덱싱이 가능하여 검색하고자 하는 내용에 대한 복합검색이 가능하답니다.

MySQL 5.5 이전까지 기본 스토리지 엔진이다.
Data 저장에 실제적인 제한이 없다.(논리적-물리적 제한은 있음)
Data를 매우 효율적으로 저장한다.
빈번한 data 사용시 효과적이다.(select문)
블로그나 게시판처럼 한사람이 글을 쓰면 다른 많은 사람이 글을 읽는 방식에 최적의 성능을 발휘한다.
index는 B-Tree, R-tree, Full-text Index를 지원한다.
특정 Index에 대한 Memory Cache를 지원한다.
data 압축에 대한 옵션을 제공한다.
지리적 Data를 지원한다.
table 단위의 lock을 제공한다.
non-transactional-safe : transaction을 제공하지 않는다.
backup 및 특정 시점으로 복구를 지원한다.
.frm : table 구조 정보(스키마 정보), .myd : data, .myl : index 정보
index만 MySQL서버가 관리하고, data는 관리하지 않는다.(data는 OS캐싱에 의존한다.)
Core수가 많더라도 성능의 차이 없음

장점
    MyISAM은 다음에 소개하는 InnoDB에 비하여 별다른 기능이 없으므로 데이터 모델 디자인이 단순.
    장점으로 전체적으로 속도가 InnoDB 보다 빠름.
    Select 작업시 속도가 빠르므로 읽기 작업에 적합.
    Full-text 인덱싱이 가능하여 검색하고자 하는 내용에 대한 복합검색이 가능.

단점
    Table-level Lock을 사용하기 때문에 쓰기 작업(INSERT, UPDATE) 속도가 느림
    데이터 무결성에 대한 보장이 되지 않음

적합한 사용처
    트레픽이 많은 웹사이트
    Data ware house
    정적인 table, 로그 table
    쓰기작업이 별로 없는 select 위주의 table.
    current insert기능이 read시에 insert가 가능하게 하므로 로그 table에 사용될 수 있다.

4. InnoDB 특징

MySQL 5.5 부터 기본 스토리지 엔진이다.
transactional-safe : ACID Transaction 지원한다.
space당 64TB Data의 저장을 지원한다.
MyISAM보다 data 저장 비율이 낮다.
MyISAM에 비해 약1.5~2.5배 정도의 큰 파일 사용한다.

MVCC/Snapshot read를 지원한다.
다른 Engine들에 비해 data 로딩 속도가 느리다.
index는 B-Tree, Clustered를 지원한다.
특정 data와 index에 대한 Memory Cache를 지원한다.
외부키(foreign key)를 지원한다.
data 압축 옵션을 제공하지 않는다.
row 단위 lock을 제공한다.
자동 에러 복구 기능을 지원한다.
backup 및 특정 시점으로 복구를 지원한다.
index와 data를 table space개념을 사용하여 저장한다.
Core수에 비례하여 성능이 올라간다.

단점
    많은 기능을 제공하다보니 데이터 모델 디자인에는 많은 시간이 필요
    시스템 자원을 많이 사용
    Full-text 인덱싱이 불가능

장점
    데이터 무결성에 보장
    제약조건, 외래 키의 생성이 가능하며, 동시성 제어
    Commit, Rollback, 장애복구, row-level locking, 외래키 등 다양한 기능을 지원
    Row-level Lock (행 단위 Lock) 을 사용하기 때문에 변경 작업(INSERT, UPDATE, DELETE)에 대한 속도가 빠름

적합한 사용처
    Online Transaction을 지원하는 Application
    민감한 정보를 갖는 table(회원table, 돈에 관련된 table)
    갱신(읽기/쓰기) 위주의 트랜잭션이 요구되는 table.
    index가 많이 걸린 대량의 table.

5. 참조
          https://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
          http://www.zeeshanarshad.com/topic/424/myisam-vs-innodb-differences-comparison-explanations

 

Category: 함께일해요-지식정보방

ssgstar

About the Author ()