[MySQL] InnoDB vs MyISAM + Memory

Sieun·2023년 2월 6일
1

Data Engineering

목록 보기
4/4
post-thumbnail

InnoDB vs MyISAM

MySQL에서는 아래와 같은 여러 스토리지 엔진을 지원한다.

InnoDB 엔진
MyISAM 엔진
Memory 엔진
Archive 엔진
CSV 엔진
Federated 엔진

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

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

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

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

스토리지 엔진이란?
데이터베이스 엔진(database engine) 또는 스토리지 엔진(storage engine)은 데이터베이스 관리 시스템(DBMS)이 데이터베이스에 대해 데이터를 삽입, 추출, 업데이트 및 삭제(CRUD 참조)하는 데 사용하는 기본 소프트웨어 컴포넌트이다.
➡️ DBMS에 포함되는 컴포넌트로 CRUD를 담당한다. 한 DBMS에 여러 종류의 스토리지 엔진이 존재할 수도 있다.


MyISAM

MySQL 5.5 이전까지 기본 스토리지 엔진이다.

특징

  • 커밋, 롤백 및 충돌 복구 기능을 가진다.
  • Table-level Lock을 제공한다.
  • 트랜잭션을 제공하지 않는다.

장점

  • Data를 매우 효율적으로 저장한다.
  • 전체적인 속도가 InnoDB 보다 빠르다.
  • Select 작업 시 속도가 빨라서 읽기 작업에 적합하다.

단점

  • Table-level Lock을 사용하기 때문에 갱신 작업 속도가 느리다.
  • 데이터 무결성에 대한 보장이 되지 않는다.

적합한 상황

  • 트래픽이 많은 웹사이트
  • Data ware house
  • 쓰기작업이 별로 없는 select 위주의 table
  • 정적인 table
  • 로그 table

InnoDB

MySQL 5.5 이후부터 기본 스토리지 엔진이다.

특징

  • 커밋, 롤백 및 충돌 복구 기능을 가진다.
  • 트랜잭션 제공 및 트랜잭션 안전(ACID 호환)을 보장한다.
  • Row-level lock을 제공한다.
  • 외부키(foreign key)를 지원한다.
  • MVCC/Snapshot read를 지원한다.

장점

  • 커밋, 롤백 및 충돌 복구 기능이 MyISAM 보다 뛰어나다.
  • Row-level Lock (행 단위 Lock) 을 사용하기 때문에 갱신 작업 속도가 빠르다.
  • MVCC를 지원해 다중 사용자 동시성이 좋다.

단점

  • 시스템 자원을 많이 사용한다.
  • MyISAM에 비해 더 큰 파일을 사용한다.

적합한 상황

  • 데이터 무결성이 필요한 상황
  • 갱신 위주의 트랜잭션이 요구되는 table

Memory

HEAP 테이블이라고도 부르며 메모리에 데이터를 저장하는 엔진이다.

특징

  • Table-level Lock을 제공한다.
  • 모든 데이터를 RAM에 저장한다.
  • 트랜잭션을 제공하지 않는다.

장점

  • 메모리를 사용하므로 속도가 매우 빠르다.

단점

  • 데이터가 휘발성 메모리에 저장되므로 영속성을 보장하지 않는다.

적합한 상황

  • 주기적으로 집계되는 데이터의 결과 캐시용
  • 데이터 분석 시 중간 결과 저장용
  • JWT 사용 시 RefreshToken 저장용

참고문헌
https://velog.io/@gillog/DBInnoDB-VS-MyISAM
https://velog.io/@yangsijun528/MySQL-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EC%97%94%EC%A7%84

profile
AI/ML 공부중👩🏻‍💻

0개의 댓글