[MySQL] MyISAM vs InnoDB
MyISAM
MySQL 5.5 이전의 기본 스토리지 엔진이다.
InnoDB
MySQL 5.5 부터 기본 스토리지 엔진으로 InnoDB로 기본 엔진이 변경
차이점 1. Engine Type
MyISAM은 non-transactional 스토리지 타입이며 롤백이 필요한 경우 수동으로 처리해야 한다.
InnoDB는 Transactional 스토리지 타입으로 롤백이 필요한 경우 자동으로 처리된다.
차이점 2. Locking
MyISAM은 기본적인 Table locking method를 사용
하나의 사용자만 테이블을 변경할 수 있으며. 만약 다른 사용자가 테이블을 바꾸려 시도한다면, 테이블이 잠겼다는 응답을 받게 된다.
Table locking method는 많은 메모리를 요구하지 않기 때문에 읽기 전용 데이터베이스에 유용하다.
InnoDB는 테이블의 Row-level locking method를 사용한다.
이 메서드는 수정 프로세스에서 테이블의 행만 잠그는 방식으로 동일한 행에 다중 세션 접근을 지원한다.
Row-level locking은 다중 사용자가 접근하는 데이터베이스에 유용하다.
많은 메모리를 필요로 하며, 조회와 데이터 수정에 대해 시간이 걸린다는 단점이 있다.
차이점 3. Foreign Keys
MyISAM은 외래키를 지원하지 않지만 InnoDB는 외래키를 지원한다.
차이점 4. ACID 특성
ACID: 트랜잭션 네 가지 특징- 원자성, 지속성, 독립성, 일관성
MyISAM은 ACID를 지원하지 않지만 InnoDB는 ACID를 지원한다.
차이점 5. 성능
MyISAM는 transaction 속성을 지원하지 않기 때문에 조회 속도가 빠르다.
InnoDB와 비교하면 대용량 데이터에서 성능이 떨어진다.
InnoDB는 transaction 속성을 지원하며 MyISAM보다 빠른 변경작업(INSERT, UPDATE, DELETE 연산)을 한다.
차이점 6. 신뢰성
MyISAM는 데이터 무결성을 제공하지 않는다.
하드웨어 오류 또는 취소된 작업으로 인해 데이터가 손상될 수 있다.
InnoDB는 Transactional log를 사용해 모든 작업을 기록한다.
따라서 장애 발생 시 로그를 사용해 빠르게 복구할 수 있다.
차이점 7. 캐싱과 인덱싱
MyISAM의 버퍼는 인덱싱 전용이며 full-text search를 지원한다.
InnoDB는 큰 버퍼 풀을 지원해 데이터와 인덱스를 캐싱할 수 있다.
하지만 full-text search는 지원하지 않고 인덱스 알고리즘으로 B-tree를 사용한다.