본문 바로가기
💾Database & Server/MySQL & Maria

[MySQL] InnoDB & MyISAM

by inbeom 2023. 8. 25.
728x90

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

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

 

InnoDB

InnoDB 및 BDB 스토리지 엔진은 트랜젝션에 안전한 테이블을 제공하는 트랜잭션-세이프 스토리지 엔진이며, 모든 5.0 바이너리 배포판에 디폴트로 포함되어 있다.

특징

  • MyISAM과 비슷하지만 ORACLE처럼 많은 기능을 지원한다.commit, rollback, 장애복구, row-level locking, 외래키다수의 사용자 동시접속과 퍼포먼스가 증가하여 대용량 데이터를 처리할 때 최대의 퍼포먼스를 내도록 설계되었다.
  • CPU 효율은 어느 디스크 기반의 데이터 베이스와 비교해도 우수하고, 자체적으로 메인 메모리 안에 데이터 캐싱과 인덱싱을 위한 버퍼 풀(pool)을 관리한다.
  • 테이블과 인덱스를 테이블 스페이스에 저장을 하고 테이블 스페이스는 몇 개의 서버 파일이나 디스크 파티션으로 구성되어있다.
  • (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 속도는 엄청나게 느려진다.

[ myisam은 외래키를 지원하지 않는다. ]

728x90

'💾Database & Server > MySQL & Maria' 카테고리의 다른 글

[MySQL] SQL Injection  (0) 2023.08.25
[MySQL] Storage Engine  (0) 2023.08.25
[MySQL] Query 함수  (0) 2023.08.25
[MySQL] Query 문법  (1) 2023.08.25