MySQL 엔진 종류

2025. 2. 12. 22:14·SQL 정리

 

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 정리' 카테고리의 다른 글

SQL INJECTION (SQL 인젝션 방지)  (0) 2025.04.29
ubuntu서버에 있는 MySQL데이터 dump후 로컬에 저장하기  (0) 2025.01.16
3개 이상 쿼리를 조회할때  (0) 2024.08.08
COALESCE  (0) 2024.08.08
시간대를 나누는 쿼리  (0) 2024.08.08
'SQL 정리' 카테고리의 다른 글
  • SQL INJECTION (SQL 인젝션 방지)
  • ubuntu서버에 있는 MySQL데이터 dump후 로컬에 저장하기
  • 3개 이상 쿼리를 조회할때
  • COALESCE
wanduek
wanduek
차근차근 쌓아가는 지식
  • wanduek
    완득님의 블로그
    wanduek
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • Onboarding (0)
      • 아티클 (0)
      • SQL 정리 (20)
      • 웹개발 기초정리(프엔) (9)
      • (Java)코테연습 (27)
      • 미니 프로젝트 (9)
        • 자기소개 웹페이지 (5)
        • 수강생 관리 프로그램(Java) (4)
      • GitHub 오류 및 명령어 정리 (7)
      • Java 문법정리 (Array부터) (17)
      • Java로 이용한 기능 (2)
      • Web지식 (12)
        • web3 (6)
        • 네트워크 (6)
      • 인텔리제이 오류 대처 방법 (1)
      • Computer Science (7)
      • Spring (38)
        • 미니 프로젝트(배달) (2)
        • Spring 트러블 슈팅 (3)
        • QueryDSL, JPQL (3)
        • 미니 프로젝트(뉴스피드) (5)
        • 미니 프로젝트(Trello) (2)
      • 개발자 밋업 (1)
      • Docker (2)
      • Redis (1)
      • AWS (6)
        • AWS 트러블 슈팅 (2)
      • Jmeter (2)
      • 우리 지금 만나 (12)
      • Kafka (1)
      • RabbitMQ (2)
        • 트러블 슈팅 (1)
      • STOMP (2)
      • WebSocket (3)
        • 트러블 슈팅 (2)
      • Node.js (2)
      • Elastic Search (2)
      • Nginx (1)
      • 퍼블엘 (2)
      • openresty (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git
    where
    fetch
    groupby
    json
    백앤드개발자 #초심자
    jquery
    SQL
    github
    ㅏㄷ
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
wanduek
MySQL 엔진 종류
상단으로

티스토리툴바