InnoDB VS MyISAM

남이섬·2023년 2월 12일
0

MySQL은 각 데이터베이스(스키마라고도 불리는)를 파일시스템 안의 데이터 디렉터리의 하위 디렉터리로 저장한다
테이블을 생성하면 MySQL은 테이블 이름과 같은 이름을 가진 .frm 파일을 만들고 그 안에 테이블 정의 정보를 저장한다

MYSQL 스토리지 엔진 종류는 InnoDB 엔진, MyISAM 엔진, Memory 엔진, Archive 엔진, CSV 엔진, Federated 엔진 등 이있지만

제일 많이 사용하는 InnoDB 엔진, MyISAM 엔진에 대해 알아 보려고 한다

MySQL의 스토리지 엔진으로 가장 많이 InnoDB와 MyISAM을 사용한다

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

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

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

InnoDB

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

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

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

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

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

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

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

InnoDB는 높은 퍼포먼스가 필요한 대용량 사이트에 적합하다

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

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

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

MyISAM

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

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

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

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

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

InnoDB와 다른점

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

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

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

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

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

profile
즐겁게 살자

0개의 댓글