트랜잭션 처리 + 대용량의 데이터 → InnoDB 엔진이 효율적
트랜잭션 처리가 필요 없고 + 운영에 Read only 기능이 많은 서비스 → MyISAM 엔진이 효율적
InnoDB
MySQL의 기본 엔진.
무겁고 느리지만 다양한 기능이 있다.
- 데이터 모델 디자인이 복잡
- 커밋과 롤백 기능이 있는 트랜잭션 세이프 테이블
- 세이브 포인트는 부분 롤백 가능하게 한다.
- 오작동 후 자동 복구 기능
- 연쇄적인 삭제와 갱신을 포함하는 외래 키와 참조 무결성 지원
- 검색과 갱신 둘다 포함하는 조건이 혼합된 질의에서 동시성 수행을 높이는 행 단위 락과 다중 버전 지원
- MySQL 5.6부터 풀 텍스트 검색과 풀 텍스트 인덱스 지원
장점
- row level locking 지원
→ 그렇기 때문에 트랜잭션 처리가 필요한 대용량의 데이터에 유리
- 데이터 무결성 보장
→ 사용자의 CRUD가 많은 서비스에 유리
단점
- 시스템 자원을 많이 소모
- 5.5 아래 버전은 풀 텍스트 인덱스 지원이 불가능
MyISAM
가볍고 빠르지만 적은 기능을 가진다.
- 데이터 모델 디자인이 단순
- 공간 자료형과 SPATIAL 인덱스 지원
장점
- SELECT 명령 시 빠른 속도
- 항상 테이블에 ROW COUNT를 가지고 있음
- 풀 텍스트 인덱스를 지원
→ Read Only기능이 많은 서비스일수록 MyISAM엔진이 효율적이라 할 수 있다.
단점
- row level locking 지원 안함
→ select, insert, update, delete 시 해당 Table 전체에 Locking이 걸린다.
→ row의 수가 커지면 커질수록 속도는 엄청나게 느려진다
- 데이터 무결성이 보장되지 않음
- 외래키 생성 불가능
InnoDB vs. MyISAM
Details | MyISAM | InnoDB |
Datafile | - 인덱스(.MYI)와 데이터 파일(.MYD)가 분리 - innoDB보다 파일 크기가 작다 |
- 데이터량이 많을 경우 MyISAM에 비해 빠름 - shared datafile : 인덱스와 데이터 공간이 공유 - innodb_file_per_table : 테이블 단위의 데이터 파일로 분리 - 테이블 정보는 shared datafile 에 저장 |
Transaction | - 테이블 락을 기본으로 insert, update, delete가 이루어진다. | - ib_logfileN log 파일을 통하여 대량의 트랜잭션을 버퍼링하고 serialization - 로그파일은 최소 2개의 그룹이며, 서로 rotate 스위칭되며 갱신되어 데이터를 파일로 적용한다. - Transation 이외에 Foreign Key, Trigger를 지원 |
속도 | - 인덱스와 데이터 파일이 테이블 단위이므로 속도가 빠르다 | - 인덱스와 데이터 파일이 같은 파일에 있어 속도가 느림 - 대량의 insert, update가 일어나면 fragment가 발생되어 더 느려진다. |
백업 | - 테이블 단위의 hot backup(파일 복사) 가능 - 테이블 파일만 있더라도 복구가 가능 |
- 테이블 단위의 hot backup(파일 복사)가 불가능 - mysqldump나 db 전체적인 복사가 필요 - 백업에 반드시 메인 sharedDB파일도 같이 이루어 져야한다. |
기타 특징 | - Table 단위 Lock 사용 - COUNT(*) 정보를 별도 저장 |
- 행(Row)단위 Lock을 사용 |
⍞ Reference
'Database' 카테고리의 다른 글
[MySQL] 성능 튜닝 - 버퍼 풀 (0) | 2020.09.05 |
---|---|
RDBMS와 NOSQL (0) | 2020.06.16 |
댓글