1️⃣ 파티셔닝이란?
하나의 테이블을 여러 개의 논리적/물리적 파티션으로 나누는 기술
즉, users라는 하나의 테이블을 내부적으로 파티션1, 파티션2, 파티션3 등으로 나눠서 저장하게 하는 MySQL의 기능
2️⃣ 왜 쓰는가?
| 목적 |
설명 |
| 쿼리 성능 향상 |
조건에 맞는 파티션만 읽고 나머지는 무시 → partition pruning |
| 데이터 관리 |
파티션 단위로 삭제, 백업, 유지관리 가능 |
| 대용량에 강함 |
1억 건 이상에서도 병목 완화 가능 |
3️⃣ 사용 가능한 파티셔닝 종류
| 유형 |
설명 |
예시 |
| RANGE |
값의 범위에 따라 나눔 |
YEAR(created_at) |
| LIST |
명시된 값에 따라 나눔 |
user_role IN ('USER', 'ADMIN') |
| HASH |
해시 함수로 균등 분산 |
MOD(user_id, 4) |
| KEY |
자동 해시 분산 |
MySQL 내부 해시 사용 |
4️⃣ 예시: RANGE 파티셔닝
CREATE TABLE users_partitioned (
id BIGINT NOT NULL,
nickname VARCHAR(255),
created_at DATETIME,
PRIMARY KEY (id, created_at)
)
PARTITION BY RANGE (YEAR(created_at)) (
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION pmax VALUES LESS THAN MAXVALUE
);
- WHERE created_at BETWEEN '2023-01-01' AND '2023-12-31' → p2023만 읽음
- 나머지 파티션은 건드리지도 않음 (Pruning)
5️⃣ 개념 요약
| 용어 |
설명 |
| 파티션 |
내부적으로 분리된 테이블 조각 |
| Pruning |
조건에 맞는 파티션만 읽는 최적화 |
| PK + 파티션 키 |
파티션 키는 PK에 포함되어야 함 (MySQL 제약) |
| 관리 단위 |
ALTER TABLE ... DROP PARTITION p2023 가능 |
6️⃣ 주의할 점
| 항목 |
설명 |
| 기존 테이블에 ALTER로 파티션 적용 불가 |
새 테이블 생성 필요 |
| PK 제약 |
파티션 키는 반드시 PK나 UNIQUE 제약에 포함되어야 함 |
| 외래키 불가 |
파티션 테이블은 외래키를 가질 수 없음 |