SHOW ENGINES;
Engine Support Comment Transactions XA Savepoints
Engine | Support | Comment | Transactions | XA | Savepoints |
InnoDB | DEFAULT | Supports transactions | YES | YES | YES |
MyISAM | YES | Non-transactional engine | NO | NO | NO |
MEMORY | YES | Stored in memory | NO | NO | NO |
CSV | YES | CSV storage engine | NO | NO | NO |
- Engine: 스토리지 엔진의 이름.
- Support: 엔진이 활성화되어 있는지 여부 (YES, NO, DEFAULT).
- Comment: 간단한 설명.
- Transactions: 트랜잭션 지원 여부.
- XA: 분산 트랜잭션 지원 여부.
- Savepoints: 트랜잭션 내의 저장 지점 지원 여부.
InnoDB와 MyISAM 비교
특징 | InnoDB | MyISAM |
트랜잭션 지원 | 지원함 (ACID 준수) | 지원하지 않음 |
외래 키 | 지원함 | 지원하지 않음 |
잠금 방식 | 행 수준 잠금 (Row-level locking) | 테이블 수준 잠금 (Table-level locking) |
데이터 복구 (Crash Recovery) | 자동 복구 기능 제공 | 자동 복구 기능 없음 |
성능 | 다중 사용자 환경에서 뛰어난 동시성 제공 | 읽기 작업(SELECT)에서 더 빠른 성능 |
디스크 공간 사용량 | 복잡한 구조로 인해 더 많은 디스크 공간 사용 | 단순한 구조로 인해 디스크 공간을 효율적으로 사용 |
전체 텍스트 검색 | 지원하지 않음 | 지원함 (Full-Text Search Index 사용 가능) |
데이터 저장 방식 | 데이터를 클러스터된 인덱스에 저장 (Clustered Index) | 데이터를 독립적으로 저장 |
락 경합 | 여러 트랜잭션에서 적은 경합 발생 | 다중 쓰기 작업 시 경합 발생 |
ACID 특성 | 지원 (Atomicity, Consistency, Isolation, Durability) | 지원하지 않음 |
주요 차이점 설명
1. 트랜잭션 지원
- InnoDB는 트랜잭션을 지원하며, COMMIT, ROLLBACK 등을 통해 작업을 원자적으로 관리할 수 있습니다.
- MyISAM은 트랜잭션을 지원하지 않아, 데이터 변경이 즉시 저장되며 작업의 원자성을 보장하지 않습니다.
2. 잠금 수준
- InnoDB는 행 수준 잠금을 제공하여, 동시성을 높이고 다중 사용자 환경에서 성능을 향상시킵니다.
- MyISAM은 테이블 수준 잠금을 사용하여, 동시 업데이트 시 성능 저하가 발생할 수 있습니다.
3. 외래 키(Foreign Key)
- InnoDB는 외래 키 제약 조건을 지원하여 데이터 무결성을 보장합니다.
- MyISAM은 외래 키를 지원하지 않아, 관계형 무결성은 애플리케이션 레벨에서 처리해야 합니다.
4. 데이터 복구
- InnoDB는 로그 파일을 기반으로 충돌 이후 데이터 복구를 지원합니다.
- MyISAM은 데이터 손실 발생 시 수동으로 복구해야 하며, 복구 시간이 길어질 수 있습니다.
5. 성능
- InnoDB는 다중 쓰기 및 읽기 환경에서 성능이 우수하며, 대규모 트랜잭션 처리에 적합합니다.
- MyISAM은 단일 쓰기 및 읽기 작업에서 더 높은 성능을 발휘합니다. 특히 읽기 중심의 시스템에서 효율적입니다.
6. 전체 텍스트 검색
- MyISAM은 기본적으로 Full-Text Search를 지원하여 텍스트 기반 데이터 검색에 유리합니다.
- InnoDB는 MySQL 5.6 이후부터 Full-Text Search를 제한적으로 지원합니다.
사용 시 고려 사항
InnoDB 사용에 적합한 경우
- 데이터 무결성이 중요한 애플리케이션 (e.g., 금융 시스템).
- 다중 사용자가 데이터를 동시에 읽고 쓰는 환경.
- 트랜잭션이 필요한 애플리케이션.
MyISAM 사용에 적합한 경우
- 읽기 작업이 대부분인 데이터베이스 (e.g., 로그 분석).
- 외래 키나 트랜잭션이 필요 없는 간단한 데이터 구조.
- 데이터 복구가 중요한 고려사항이 아닌 경우.
실습을 통해 차이 이해하기
(1) 테이블 생성 시 엔진 선택
CREATE TABLE test_innodb (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
) ENGINE=InnoDB;
CREATE TABLE test_myisam (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
) ENGINE=MyISAM;
(2) 기본 스토리지 엔진 확인
SHOW VARIABLES LIKE 'default_storage_engine';
(3) 현재 테이블의 엔진 확인
SELECT TABLE_NAME, ENGINE
FROM information_schema.tables
WHERE table_schema = 'sample';
'Spring' 카테고리의 다른 글
Persistence Layer(영속성 계층) (0) | 2025.01.11 |
---|---|
Transaction(트랜잭션)과 TCL(Transaction Control Language) (0) | 2025.01.11 |
Swagger (REST API 문서화) (0) | 2025.01.10 |
CORS (Cross-Origin Resource Sharing) (0) | 2025.01.10 |
AJAX(Asynchronous JavaScript and XML) (0) | 2025.01.10 |