MySQL InnoDB와 MyISAM

Jang990·2023년 2월 1일
0
post-custom-banner

MySQL에 AutoIncrement 관련 글을 검색해보다 InnoDB라는 단어가 나왔다. 내가 모르던 단어이기 때문에 InnoDB에 대해 알아보고 관련 주제의 글을 작성한다.

InnoDB

InnoDB 5.5버전 이후에 쓰는 스토리지 엔진이다.

스토리지 엔진이란 다양한 테이블 유형에 대한 SQL 작업을 처리하는 MySQL 구성 요소이다. 스토리지 엔진은 데이터 저장 방법, 데이터 검색 방법 및 데이터 조작 방법을 결정하므로 데이터베이스 시스템의 중요한 부분이다. 서로 다른 스토리지 엔진은 성능, 안정성 및 확장성 간에 서로 다른 트레이드 오프를 제공하며 특정 사용 사례에 적합한 엔진을 선택하는 것이 중요하다.

스토리지 엔진을 설정하려면 다음과 같이 테이블을 생성할 때 ENGINE = InnoDB를 붙혀주면 된다.

CREATE TABLE example_table (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL
) ENGINE = InnoDB;

InnoDB는 5.5 버전 이후로 기본 스토리지 엔진이기 때문에 ENGINE = InnoDB를 생략해도 된다.

InnoDB는 사용자 데이터를 보호하기 위해 커밋, 롤백 및 충돌 복구 기능이 있는 MySQL용 트랜잭션 안전(ACID 준수) 스토리지 엔진이다.


그렇다면 5.5 버전 이전에 사용하는 스토리지 엔진은 무엇일까?

MyISAM

5.5 버전 이전에 사용하는 스토리지 엔진은 MyISAM이다.

InnoDB와 MyISAM을 비교한 표는 다음과 같다. 해당 표의 높음과 낮음 등의 비교는 상대적인 수치이다.

InnoDBMyISAM
트랜잭션 지원OX
외래 키 지원OX
행 수준 잠금 제공OX
크래시 복구OX
오버헤드높음낮음
디스크 사용량높음낮음
텍스트 검색 속도느림빠름

MyISAM은 트랜잭션 및 외래 키에 대한 정보를 유지할 필요가 없기 때문에 InnoDB에 비해 오버헤드가 적다.

MyISAM은 Full-Text Search을 위해 특별한 인덱싱 방법을 사용하므로 InnoDB에 비해 Full-Text Search 기능이 더 빠르다.

MyISAM은 충돌 복구 목적으로 데이터를 두 번 저장하지 않기 때문에 InnoDB에 비해 디스크 공간이 덜 필요하다.


결과적으로 데이터의 안정성이 크게 관건이 아니고, 데이터베이스 성능이나 처리 속도, 용량 등이 핵심 고려 요소인 경우 MyISAM를 사용하는 것이 좋다.

데이터의 안정성이 중요하지 않을 수 있는 경우의 예는 사용자 데이터가 일시적이고 충돌 또는 데이터 손실 시 쉽게 재생성하거나 복원할 수 있는 웹 응용 프로그램이다. 예를 들어 사용자 장바구니 또는 사용자가 다시 로그인할 때 복원하거나 다시 만들 수 있는 사용자의 임시 기본 설정 등이 있다.

Full-Text Index

전체 텍스트 인덱스는 InnoDB또는 MyISAM테이블에만 사용할 수 있다.

-- B-Tree Index 방식
SELECT * FROM table_name WHERE column_name = 'some_value';

-- Full Text Index 방식
SELECT * FROM table_name WHERE MATCH (column_name) AGAINST ('some_keyword');

하지만 MyISAM은 검색어를 토큰으로 분할하여 각 토큰을 따로 인덱싱하는 방식으로 검색의 속도를 향상시키는 특별한 인덱싱 방식을 사용하기 때문에 InnoDB에 비해 Full-Text 검색이 더 빠르다.

MyISAM은 Auto-Increment를 지원하지 않는다.

참고

https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html
https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html

profile
공부한 내용을 적지 말고 이해한 내용을 설명하자
post-custom-banner

0개의 댓글