MyISAM, InnoDB
mySQL을 써봤다면 위의 단어들을 들어봤을 것이다.
둘 다 mySQL의 Storage Engine이며, 아마 가장 흔하게 사용되는 것들일 것이다.
두 디비의 특징은 다음과 같다.
MyISAM
MyISAM 스토리지 엔진은 다음과 같은 특징을 갖는다.
- mySql의 5.5 버전 이전에는 기본 스토리지 엔진이었다.
- InnoDB에 비해서 상대적으로 가볍다.
- Table Level Locking 으로 인해 Insert, Update, Delete 시에 Table 전체에 Lock이 걸린다. (row가 많아질 수록 처리 능력은 떨어진다..)
- Table과 Index를 별도의 파일로 저장한다.
- 검색(Select) 작업 처리 능력이 아주 좋다.
- 풀 텍스트 인덱스를 지원한다.
- 검색 엔진과 유사한 방법으로 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장한다.
MyISAM 스토리지 엔진은 다음과 같은 상황에서 효율적이다.
- 트랜잭션 처리가 필요없음
- Read Only 기능이 많은 서비스가 많은 상황
- 전문 검색이 필요한 테이블
- 한 번에 많은 데이터를 밀어넣는 배치성 테이블
예를 들면 블로그와 같이 소수의 유저가 데이터를 생성하고, 다수의 유저들은 읽기만 하는 상황에서 유리하다고 생각하면 된다!
InnoDB
InnoDB 스토리지 엔진은 다음과 같은 특징을 갖는다.
- mySql의 5.5버전부터 기본 스토리지 엔진으로 변경되었다.
- 많은 기능을 제공하기에 상대적으로 무거운 편
- Row Level Locking 을 지원해서 Insert, Update, Delete에 유리하다.
- 테이블과 인덱스를 테이블 스페이스에 저장한다.
- 외래키를 지원한다.
- 트랜잭션 처리를 지원한다.
- 풀 텍스트 인덱스를 지원하지 못한다.
InnoDB 스토리지 엔진은 다음과 같은 상황에서 효율적이다.
- 트랜잭션 처리가 필요
- 복구가 필요한 경우
- 정렬 등의 구문이 들어가는 경우
- CRUD 와 같은 작업이 빈번하게 일어나는 경우 (데이터의 변화가 잦은 경우)
예를 들면 다수의 사용자가 동시 접속해서 여러 개의 글을 동시에 쓰고, 수정하고, 삭제하는 대규모 커뮤니티 사이트의 경우 유리하다고 생각하면 된다.