
MySQL은 여러 가지 스토리지 엔진(Storage Engine) 을 지원하며, 이는 데이터가 디스크에 저장되고 처리되는 방식을 결정한다. 각각의 엔진은 성능, 트랜잭션 지원, 데이터 무결성, 잠금 메커니즘 등에서 차이가 있다.
InnoDB(기본엔진)
특징:
- 트랜잭션 지원 (ACID 준수)
- 외래 키(Foreign Key) 제약 조건 지원
- 자동 복구 기능
- 다중 버전 동시성 제어(MVCC)로 높은 동시 처리 성능
사용 사례:
- 대규모 애플리케이션, 데이터 무결성이 중요한 경우 (ex: 은행, 쇼핑몰)
기본 설정
CREATE TABLE example (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=InnoDB;
MyISAM (이전 기본 엔진)
특징:
- 트랜잭션 미지원 (비-ACID)
- 외래 키 지원 없음
- 테이블 단위 잠금 (Table Lock)
- 빠른 읽기 성능, 낮은 쓰기 성능
사용 사례:
- 데이터 분석, 통계 처리 등 읽기 작업이 많은 경우
CREATE TABLE example (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MyISAM;
MEMORY (HEAP)
특징:
- 데이터를 메모리에 저장하여 매우 빠른 속도 제공
- 서버 재시작 시 데이터 사라짐 (휘발성)
- 해시 인덱스를 사용하여 빠른 조회 성능
사용 사례:
- 임시 데이터 저장, 캐시 용도
예제
CREATE TABLE example (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
CSV
특징:
- 데이터를 CSV(Comma-Separated Values) 파일로 저장
- 외부 애플리케이션과 데이터 교환 시 유용
사용 사례:
- 데이터 마이그레이션, 간단한 데이터 공유
예제
CREATE TABLE example (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=CSV;
ARCHIVE
- 특징:
- 대용량 데이터 압축 저장
- INSERT와 SELECT만 지원 (UPDATE, DELETE 불가)
- 빠른 데이터 쓰기 및 높은 압축률
- 사용 사례:
- 로그 데이터, 과거 기록 저장용
예제
CREATE TABLE example (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=FEDERATED
CONNECTION='mysql://user:password@host:port/db/table';
FEDERATED
- 특징:
- 원격 MySQL 서버의 테이블에 직접 연결하여 조회
- 로컬에 데이터 저장하지 않음
- 사용 사례:
- 분산 데이터베이스 환경에서 원격 데이터 접근
예제
CREATE TABLE example (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=FEDERATED
CONNECTION='mysql://user:password@host:port/db/table';
NDB (Clustered)
특징:
- MySQL Cluster용 분산형 데이터베이스 엔진
- 높은 가용성 및 수평 확장성 지원
사용 사례:
- 실시간 통신, 대규모 분산 시스템
예제:
CREATE TABLE example (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=NDB;
엔진 선택 기준
- 트랜잭션 필요 → InnoDB
- 읽기 성능 최우선 → MyISAM
- 빠른 캐시용 → MEMORY
- 로그 저장 → ARCHIVE
- 분산 데이터베이스 → FEDERATED / NDB
'SQL 정리' 카테고리의 다른 글
ubuntu서버에 있는 MySQL데이터 dump후 로컬에 저장하기 (0) | 2025.01.16 |
---|---|
3개 이상 쿼리를 조회할때 (0) | 2024.08.08 |
COALESCE (0) | 2024.08.08 |
시간대를 나누는 쿼리 (0) | 2024.08.08 |
오프라인/온라인 판매 데이터 통합하기(IFNULL, UNION) (0) | 2024.08.06 |