본문 바로가기
  • 꾸준히 앞으로
Database

[MySQL] 스토리지 엔진 - InnoDB, MyISAM

by lijly 2020. 9. 4.

 

트랜잭션 처리 + 대용량의 데이터 → InnoDB 엔진이 효율적
트랜잭션 처리가 필요 없고 + 운영에 Read only 기능이 많은 서비스 → MyISAM 엔진이 효율적

 

InnoDB


MySQL의 기본 엔진.

무겁고 느리지만 다양한 기능이 있다.

  • 데이터 모델 디자인이 복잡
  • 커밋과 롤백 기능이 있는 트랜잭션 세이프 테이블
    • 세이브 포인트는 부분 롤백 가능하게 한다.
  • 오작동 후 자동 복구 기능
  • 연쇄적인 삭제와 갱신을 포함하는 외래 키와 참조 무결성 지원
  • 검색과 갱신 둘다 포함하는 조건이 혼합된 질의에서 동시성 수행을 높이는 행 단위 락과 다중 버전 지원
  • MySQL 5.6부터 풀 텍스트 검색과 풀 텍스트 인덱스 지원

 

장점

  • row level locking 지원
    → 그렇기 때문에 트랜잭션 처리가 필요한 대용량의 데이터에 유리
  • 데이터 무결성 보장
    → 사용자의 CRUD가 많은 서비스에 유리

단점

  • 시스템 자원을 많이 소모
  • 5.5 아래 버전은 풀 텍스트 인덱스 지원이 불가능

 

MyISAM


가볍고 빠르지만 적은 기능을 가진다.

  • 데이터 모델 디자인이 단순
  • 공간 자료형과 SPATIAL 인덱스 지원

장점

  • SELECT 명령 시 빠른 속도
  • 항상 테이블에 ROW COUNT를 가지고 있음
  • 풀 텍스트 인덱스를 지원
    → Read Only기능이 많은 서비스일수록 MyISAM엔진이 효율적이라 할 수 있다.
    💡
    풀 텍스트 인덱스란,
    검색 엔진과 유사한 방법으로 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장한다.

단점

  • row level locking 지원 안함
    → select, insert, update, delete 시 해당 Table 전체에 Locking이 걸린다.
    → row의 수가 커지면 커질수록 속도는 엄청나게 느려진다
  • 데이터 무결성이 보장되지 않음
  • 외래키 생성 불가능

 

InnoDB vs. MyISAM


 

Details MyISAM InnoDB
Datafile - 인덱스(.MYI)와 데이터 파일(.MYD)가 분리
- innoDB보다 파일 크기가 작다
- 데이터량이 많을 경우 MyISAM에 비해 빠름
- shared datafile : 인덱스와 데이터 공간이 공유
- innodb_file_per_table : 테이블 단위의 데이터 파일로 분리
- 테이블 정보는 shared datafile 에 저장
Transaction - 테이블 락을 기본으로 insert, update, delete가 이루어진다. - ib_logfileN log 파일을 통하여 대량의 트랜잭션을 버퍼링하고 serialization
- 로그파일은 최소 2개의 그룹이며, 서로 rotate 스위칭되며 갱신되어 데이터를 파일로 적용한다.
- Transation 이외에 Foreign Key, Trigger를 지원
속도 - 인덱스와 데이터 파일이 테이블 단위이므로 속도가 빠르다 - 인덱스와 데이터 파일이 같은 파일에 있어 속도가 느림
- 대량의 insert, update가 일어나면 fragment가 발생되어 더 느려진다.
백업 - 테이블 단위의 hot backup(파일 복사) 가능
- 테이블 파일만 있더라도 복구가 가능
- 테이블 단위의 hot backup(파일 복사)가 불가능
- mysqldump나 db 전체적인 복사가 필요
- 백업에 반드시 메인 sharedDB파일도 같이 이루어 져야한다.
기타 특징 - Table 단위 Lock 사용
- COUNT(*) 정보를 별도 저장
- 행(Row)단위 Lock을 사용

 

⍞ Reference


 

 

'Database' 카테고리의 다른 글

[MySQL] 성능 튜닝 - 버퍼 풀  (0) 2020.09.05
RDBMS와 NOSQL  (0) 2020.06.16

댓글