[Database] MyISAM VS InnoDB

행복한 콩🌳·2022년 12월 19일
0

데이터베이스

목록 보기
18/26

MyISAM VS InnoDB

MySQL의 스토리지 엔진으로 가장 많이 사용하는 엔진으로는 InnoDB와 MyISAM이 있다.

결론적으로 얘기하자면 트랜잭션 처리가 필요하고 대용량의 데이터를 다루기 위해서는 InnoDB가 효율적이고, 반면 트랜잭션 처리가 필요없고 운영에 Read only 기능이 많은 서비스일수록 MyISAM 엔진이 효율적이다.
한마디로 MyISAM은 SELECT가 많은서비스에, InnoDB는 데이터의 변화가 많은 서비스에 적합하다 할 수 있다.

InnoDB

InnoDB 및 BDB 스토리지 엔진은 트랜젝션에 안전한 테이블을 제공하는 트랜잭션-세이프 스토리지 엔진이다.

InnoDB는 모든 5.0 바이너리 배포판에 디폴트로 포함되어 있다.

MyISAM과 비슷하지만 ORACLE처럼 많은 기능을 지원한다.
commit, rollback, 장애복구, 외래키 등

다수의 사용자 동시접속과 퍼포먼스가 증가하여 대용량 데이터를 처리할 때 최대의 퍼포먼스를 내도록 설계되었다.

CPU 효율은 어느 디스크 기반의 데이터 베이스와 비교해도 우수하고, 자체적으로 메인 메모리 안에 데이터 캐싱과 인덱싱을 위한 버퍼 풀(pool)을 관리한다.

MyISAM 과 다른 점으로 테이블과 인덱스를 테이블 스페이스에 저장을 하고 테이블 스페이스는 몇개의 서버파일이나 디스크 파티션으로 구성되어있습니다.
MyISAM은 테이블과 인덱스를 각각 분리된 파일로 관리

InnoDB 테이블은 OS의 파일 사이즈 한계가 2GB이더라도 상관없이 어느 크기나 가질 수 있다.

MyISAM의 단점으로 있었던 row level locking이 지원된다.

그렇기 때문에 트랜잭션 처리가 필요한 대용량의 데이터에 유리한 점이 있어서, 사용자의 CRUD가 많은 서비스에 유리하다.

단점으로는, MyISAM의 장점인 풀텍스트 인덱스를 지원하지 못한다.

MyISAM

MyISAM은 비-트랜젝션-세이프(non-transactional-safe) 테이블을 관리한다.

전체 문장 검색 능력 뿐만 아니라, 고-성능 스토리지 밀 복구 기능을 제공한다.

항상 테이블에 ROW COUNT를 가지고 있기 때문에 SELECT count(*) 명령시 빠르고, SELECT 명령시에도 빠른 속도를 지원한다.

MyISAM은 풀텍스트 인덱스를 지원하는데 그렇기 때문에 Read Only기능이 많은 서비스일 수록 MyISAM이 효율적이라 할 수 있다.

풀텍스트 인덱스 : 검색 엔진과 유사한 방법으로 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장

모든 MySQL 구성에서 지원되며, 다른 타입의 엔진으로 디폴트 구성하지 않는 한 이 엔진이 디폴트 스토리지 엔진으로 구성된다.

MyISAM은 블로그라던지, 게시판 처럼 한사람이 글을 쓰면 다른 많은 사람들이 글을 읽는 방식에 최적의 성능을 발휘한다.

MyISAM은 테이블과 인덱스를 각각 분리된 파일로 관리한다.

단점으로는, row level locking을 지원하지 못해, SELECT INSERT UPDATE DELETE시 해당 Table 전체에 Locking이 걸린다.

그래서 row의 수가 커지면 커질수록 CRUD 속도는 엄청나게 느려진다.

그리고 용도에 따라 스토리지 엔진을 결정하는데, MyISAM과 InnoDB 테이블을 같이 사용할 경우, 조인시 주의해야한다고 함.

참고 : mysql 엔진 MyISAM과 InnoDB 차이

profile
매일매일 조금씩 모여 숲이 되자🐣

0개의 댓글