Cs

20. INNODB vs MYISAM

ITSEONG 2022. 5. 10. 20:27

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

 

MyISAM

- MySQL 5.5 이하의 버전에서 기본 스토리지 엔진이다. 

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

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

- MyISAM의 최대 단점 트랙잭션을 지원하지 않는 것이다.

 

* 트랜잭션이란? 

 트랜잭션 도구

START TRANSACTION : COMMIT, ROLLBACK이 나올 때까지 실행되는 모든 SQL추적

COMMIT : 모든 코드를 실행(문제가 없을 경우에)

ROLLBACK : START TRANSACTION 실행 전 상태로 되돌림( 문제가 생기면 )

 

MyISAM의 장점

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

- 풀 텍스트 인덱스를 지원하는데 그렇기 때문에 Read Only기능이 많은 서비스일수록MyISAM이 효율적이라 할 수 있다. (EX. 게시판, 블로그 보기)

 

* 풀 텍스트 인덱스란?

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

 

단점

- ROW의 수가 커지면 CRUD 속도는 엄청나게 느려진다.

 

default engine의 변화

MYSQL 5.6부터 MyISAM에서 InnoDB로 변경이 되었다. 이유는 Row-level-Locking인 InnoDB에 비해 Table-level-Locking인 MyISAM은 dml이 많은 시스템에선 한계가 있고 InnoDB의 거듭된 향상으로 속도의 차이가 없을 만큼 빨라져 특별한 이유가 있는 게 아니면 InnoDB의 사용이 권장됨.

 

InnoDB

- MySQL 5.6에서 기본 엔진은 InnoDB이다. ENGINE옵션에서 다른 엔진 이름을 언급하지 않으면 기본 스토리지 엔진이 사용된다.

- MyISAM 대비 다음의 장점이 있다.

  • 트랜잭션 지원
    • 데이터 무결성 보장
    • COMMIT
    • ROLLBACK
    • 동시성 제어
  • Foreign Key 지원 (외래 키) - 선언적 참조 무결성
  • Row Level Locking - 다중 사용자 동시성과 성능을 높인다. InnoDB의 잠금은 트랜잭션이 커밋되거나 중단될 때 해제된다. 

단점

myisam 보다 많은 용량을 차지한다. 데이터를 삭제해도 용량이 줄지 않는다.

 

innodb가 유리한 점

  • 대용량의 데이터를 컨트롤하는 경우
  • 트랜잭션 관리가 필요한 경우
  • 복구가 필요한 경우
  • order by 등 정렬이 필요한 경우
  • insert, update, delete 등이 빈번하게 발생하는 경우(row-level-locking)

MyISAM이 유리한 점

  • select 위주의 작업만 필요한 경우
  • 전문 검색이 필요한 경우
  • 트랜잭션이나 복구 등이 필요 없는 경우
  • 한 번에 대량의 데이터를 입력하는 배치성 테이블

위 사항들을 유의하여 본인에 맞는 db엔진을 정하면 되겠다.

 

https://www.w3resource.com/mysql/mysql-storage-engines.php
https://velog.io/@gillog/DBInnoDB-VS-MyISAM​
반응형