MySQL에 AutoIncrement 관련 글을 검색해보다 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 버전 이전에 사용하는 스토리지 엔진은 무엇일까?
5.5 버전 이전에 사용하는 스토리지 엔진은 MyISAM이다.
InnoDB와 MyISAM을 비교한 표는 다음과 같다. 해당 표의 높음과 낮음 등의 비교는 상대적인 수치이다.
InnoDB | MyISAM | |
---|---|---|
트랜잭션 지원 | O | X |
외래 키 지원 | O | X |
행 수준 잠금 제공 | O | X |
크래시 복구 | O | X |
오버헤드 | 높음 | 낮음 |
디스크 사용량 | 높음 | 낮음 |
텍스트 검색 속도 | 느림 | 빠름 |
MyISAM
은 트랜잭션 및 외래 키에 대한 정보를 유지할 필요가 없기 때문에 InnoDB
에 비해 오버헤드가 적다.
MyISAM
은 Full-Text Search을 위해 특별한 인덱싱 방법을 사용하므로 InnoDB
에 비해 Full-Text Search 기능이 더 빠르다.
MyISAM
은 충돌 복구 목적으로 데이터를 두 번 저장하지 않기 때문에 InnoDB
에 비해 디스크 공간이 덜 필요하다.
결과적으로 데이터의 안정성이 크게 관건이 아니고, 데이터베이스 성능이나 처리 속도, 용량 등이 핵심 고려 요소인 경우 MyISAM
를 사용하는 것이 좋다.
데이터의 안정성이 중요하지 않을 수 있는 경우의 예는 사용자 데이터가 일시적이고 충돌 또는 데이터 손실 시 쉽게 재생성하거나 복원할 수 있는 웹 응용 프로그램이다. 예를 들어 사용자 장바구니 또는 사용자가 다시 로그인할 때 복원하거나 다시 만들 수 있는 사용자의 임시 기본 설정 등이 있다.
전체 텍스트 인덱스는 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