이종관
Back to Posts

MySQL 파티셔닝 완벽 가이드

대용량 테이블 성능 최적화를 위한 MySQL 파티셔닝 전략

2025년 1월 13일·5 min read·
data
mysql
database
partitioning
performance
scalability

파티셔닝이란?

파티셔닝은 데이터베이스 테이블을 여러 작은 부분으로 나누어 데이터를 효율적으로 관리하고 성능을 개선하는 기법입니다.

테이블이 커지면 데이터 접근 속도가 느려지는데, 파티셔닝을 적용하면 쿼리 실행 시 전체 테이블이 아닌 필요한 파티션만 검색하여 성능을 높일 수 있습니다.

파티셔닝의 주요 이점

  • 성능 향상: 특정 파티션만 읽어 검색 속도 향상
  • 관리 용이성: 파티션 단위로 백업, 복구, 아카이빙 가능
  • 병렬 처리: 파티션별 독립적 처리로 병렬 작업 가능

MySQL 파티셔닝 방식

1. Range Partitioning (범위 파티셔닝)

날짜, 숫자 등 연속적인 값으로 데이터를 분할합니다.

CREATE TABLE orders (
  order_id INT,
  order_date DATE,
  customer_id INT,
  amount DECIMAL(10, 2)
)
PARTITION BY RANGE (YEAR(order_date)) (
  PARTITION p0 VALUES LESS THAN (2021),
  PARTITION p1 VALUES LESS THAN (2022),
  PARTITION p2 VALUES LESS THAN (2023),
  PARTITION p3 VALUES LESS THAN (2024)
);

장점: 날짜 범위 조회 시 해당 파티션만 검색 단점: 데이터 분포가 고르지 않으면 특정 파티션에 몰림

2. List Partitioning (목록 파티셔닝)

지정된 값 목록에 따라 분할합니다. 국가 코드, 지역, 상태 값 등에 적합합니다.

CREATE TABLE customers (
  customer_id INT,
  customer_name VARCHAR(50),
  country_code CHAR(2)
)
PARTITION BY LIST (country_code) (
  PARTITION p_us VALUES IN ('US'),
  PARTITION p_uk VALUES IN ('UK'),
  PARTITION p_ca VALUES IN ('CA')
);

3. Hash Partitioning (해시 파티셔닝)

해시 함수를 사용하여 데이터를 균등하게 분산합니다.

CREATE TABLE transactions (
  transaction_id INT,
  customer_id INT,
  amount DECIMAL(10, 2)
)
PARTITION BY HASH (customer_id) PARTITIONS 4;

장점: 데이터 균등 분산, 특정 파티션 과부하 방지 단점: 범위 쿼리 최적화 어려움

4. Key Partitioning (키 파티셔닝)

MySQL 내부 해시 알고리즘을 사용하여 프라이머리 키나 유니크 키 기준으로 분할합니다.

CREATE TABLE logs (
  log_id INT AUTO_INCREMENT,
  log_message VARCHAR(255)
)
PARTITION BY KEY(log_id) PARTITIONS 4;

파티션 관리

파티션 추가

ALTER TABLE orders ADD PARTITION (
  PARTITION p4 VALUES LESS THAN (2025)
);

파티션 삭제

ALTER TABLE orders DROP PARTITION p0;

파티셔닝 최적화 팁

Partition Pruning 활용

쿼리 시 WHERE 조건에 파티셔닝 컬럼을 포함하면 MySQL이 필요한 파티션만 검색합니다.

-- 좋은 예: p2 파티션만 검색
SELECT * FROM orders WHERE order_date BETWEEN '2022-01-01' AND '2022-12-31';

-- 나쁜 예: 모든 파티션 검색
SELECT * FROM orders WHERE amount > 1000;

적합한 테이블 선택

  • 적합: 수백만 행 이상의 대용량 테이블
  • 부적합: 작은 테이블 (관리 복잡성만 증가)

파티셔닝의 한계

제한 사항설명
복잡성 증가설계와 관리가 복잡해짐
FK 제약FOREIGN KEY 지원 제한
데이터 이동파티션 간 이동 시 오버헤드 발생

정리

파티셔닝은 대용량 데이터베이스 성능 최적화의 핵심 기법입니다. 데이터 특성과 쿼리 패턴을 분석하여 적절한 파티셔닝 방식을 선택하세요.

방식적합한 상황
Range날짜/시간 기반 조회가 많을 때
List카테고리/지역별 분류 시
Hash균등 분산이 필요할 때
KeyPK 기반 자동 분산