(MySQL) MyISAM vs InnoDB
MyISAM vs InnoDB
MyISAM
한마디로 정의하자면 가볍고 빠르다.
엔진 자체가 아주 기본적인 기능만 제공하여 데이터 변경이 자주 일어나지 않고 검색이 자주 일어나는 테이블인 경우
사용하기에 적합하다.
다만 트렌잭션을 지원해주지 않아 데이터 무결성을 보장하지 않기 때문에 개발자가 코드레벨에서 이에 대한 처리를 해주어야 한다는 단점이 존재한다. (외래 키 생성도 불가하다.)
SELECT에 최적화되어있는 아주 가벼운 엔진
InnoDB
한마디로 정의하자면 무겁고 느리다.
엔진 자체가 데이터 수정 작업에 특화되어있기 때문에 데이터 변경이 자주 일어나는 테이블인 경우 사용하기에 적합하다.
트렌잭션을 지원해주고 (COMMIT & ROLLBACK 지원) 이에 따라 데이터 무결성이 제공됨으로 MyISAM과 달리 무결성에 보장을 코드레벨에서 작성할 부담이 없다. (장애 복구, 외래 키 생성 가능)
UPDATE, DELETE에 최적화되어있는 무거운 엔진
Locking이란?
DB에 저장된 데이터의 무결성을 보호하기 위해서 MYSQL은 Locking을 사용한다.
간단히 말하자면 Locking은 데이터에 접근하지 못하도록 막는 것을 의미한다.
각각의 스토리지 엔진은 저 마다 다른 방법의 Locking을 사용한다.
가장 대표적인 Locking 두 가지 : Table locking, Row level Locking
Table locking
테이블의 하나 이상의 데이터가 업데이트 혹은 삭제할 때 전체 테이블을 Locking 하는 기술이다.
MYISAM이 사용하는 Locking 기술이기도 하다.
Row-Level Locking
특정 범위 안의 데이터가 변경 혹은 삭제할 때 해당 범위의 row들을 함께 Locking 하는 기술이다.
InnoDB가 사용하는 Locking 기술이기도 하다. 효율성을 중시하는 DB에서 사용된다.
MyISAM vs InnoDB
MyISAM은 쓰기 활동보다 훨씬 많은 읽기 활동이 필요한 대형 테이블에서 InnoDB보다 성능이 뛰어납니다.
만약 사용하는 application이 변경이 많이 일어나지 않는 거대한 테이블을 의존한다면 InnoDB를 사용하는 것보다 MyISAM를 사용하는 것이 효율적이다.
대조적으로 InnoDB는 데이터가 자주 변경되는 테이블에 적합합니다.
테이블의 데이터를 변경하는 것은 데이터를 읽는 것보다 초 당 더 많은 데이터를 소비합니다. 이러한 상황이라면 InnoDB는 전체 테이블을 Lock 하는 것보다 많은 양의 요청을 더 쉽게 처리할 수 있습니다.
References
https://www.liquidweb.com/kb/mysql-performance-myisam-vs-innodb/