jongkwan.dev
개발 · Essay №008

MySQL 파티셔닝 완벽 가이드

Range, List, Hash, Key 파티셔닝으로 대용량 MySQL 테이블 성능을 최적화하는 전략

이종관2025년 1월 13일5 min read
Contents

파티셔닝이란?

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

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

파티셔닝의 주요 이점

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

MySQL 파티셔닝 방식

Range Partitioning (범위 파티셔닝)

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

Range 파티셔닝은 PARTITION BY RANGE 절에 지정한 표현식의 값 범위에 따라 행을 분배한다. VALUES LESS THAN은 각 파티션이 수용하는 값의 상한을 정의한다.

sql
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)
);

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

List Partitioning (목록 파티셔닝)

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

sql
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')
);

Hash Partitioning (해시 파티셔닝)

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

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

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

Key Partitioning (키 파티셔닝)

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

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

파티션 관리

파티션 추가

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

파티션 삭제

sql
ALTER TABLE orders DROP PARTITION p0;

파티셔닝 최적화 팁

Partition Pruning 활용

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

sql
-- 좋은 예: 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 기반 자동 분산