본문 바로가기

SQL/Mysql

[MYSQL] InnoDB VS MyISAM

InnoDB? MyISAM?

MySQL의 스토리지 엔진으로 가장 많이 사용하는 InnoDB와 MyISAM의 차이를 정리하자.

InnoDB 엔진은 트랜잭션 처리가 필요하고, 대용량의 데이터를 다루는 부분에서 효율적
MyISAM 엔진은 트랜잭션 처리가 필요 없고, Read only 기능이 많은 서비스일수록 효율적

정리하면,
InnoDB는 데이터의 변화가 많은 서비스에 적합하다
MyISAM은 SELECT가 많은 서비스에 적합하다

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


InnoDB

-InnoDB 및 BDB 스토리지 엔진은 트랜젝션에 안전한 테이블을 제공하는 트랜잭션-세이프 스토리지 엔진이다.
-InnoDB는 모든 5.0 바이너리 배포판에 디폴트로 포함되어 있다.
-MyISAM과 비슷하지만 ORACLE처럼 많은 기능을 지원한다.

-다수의 사용자 동시접속과 퍼포먼스가 증가하여 대용량 데이터를 처리할 때 최대의 퍼포먼스를 내도록 설계되었다.
(EX : commit, rollback, 장애복구, row-level locking, 외래키 등 )
- CPU 효율은 어느 디스크 기반의 데이터베이스와 비교해도 우수하고, 자체적으로 메인 메모리 안에 데이터 캐싱과 인덱싱을 위한 버퍼 풀(pool)을 관리한다.
- MyISAM 과 다른 점으로 테이블과 인덱스를 테이블 스페이스에 저장을 하고 테이블 스페이스는 몇개의 서버파일이나 디스크 파티션으로 구성되어있다.
- MyISAM은 테이블과 인덱스를 각각 분리된 파일로 관리한다.
- InnoDB 테이블은 OS의 파일 사이즈 한계가 2GB이더라도 상관없이 어느 크기나 가질 수 있다.
- InnoDB는 높은 퍼포먼스가 필요한 대용량 사이트에 적합하다.

 

장점 : MyISAM의 단점으로 있었던 row level locking이 지원된다. 그렇기 때문에 트랜잭션 처리가 필요한 대용량의 데이터에 유리한 점이 있어서, 사용자의 CRUD가 많은 서비스에 유리하다.

단점 : MyISAM의 장점인 풀텍스트 인덱스를 지원하지 못한다.


MyISAM

- MyISAM은 비-트랜젝션-세이프(non-transactional-safe) 테이블을 관리한다.
- 전체 문장 검색 능력뿐만 아니라, 고-성능 스토리지 밀 복구 기능을 제공한다.
- 모든 MySQL 구성에서 지원되며, 다른 타입의 엔진으로 디폴트 구성하지 않는 한 이 엔진이 디폴트 스토리지 엔진으로 구성된다.
- 블로그라던지, 게시판처럼 한사람이 글을 쓰면 다른 많은 사람이 글을 읽는 방식에 최적의 성능을 발휘한다.
- MyISAM은 테이블과 인덱스를 각각 분리된 파일로 관리한다.

장점 : 항상 테이블에 ROW COUNT를 가지고 있기 때문에 SELECT count(*) 명령시 빠르고, SELECT 명령시에도 빠른 속도를 지원한다. 풀텍스트 인덱스를 지원하는데 그렇기 때문에 Read Only기능이 많은 서비스일 수록 MyISAM이 효율적이라 할 수 있다.

 

단점 : row level locking을 지원하지 못해, SELECT INSERT UPDATE DELETE시 해당 Table 전체에 Locking이 걸린다. 그래서 row의 수가 커지면 커질수록 CRUD 속도는 엄청나게 느려진다.

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

https://rebeccajo.tistory.com/14
 

mysql 엔진 MyISAM과 InnoDB 차이

내 머리도 휘발성 메모리 ㅜㅜ 자꾸 잊어서, 다시 한 번 기억하며 기록해 보자!  MyISAM     VS     InnoDB Mysql의 스토리지 엔진으로 가장 많이 사용하는 MyISAM, InnoDB의 차이를 알아보자. 결론적

rebeccajo.tistory.com