SPRING

[SPRING] 파티셔닝(Partitioning)

도원좀비 2025. 5. 2. 15:55

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 제약에 포함되어야 함
외래키 불가 파티션 테이블은 외래키를 가질 수 없음