MySQL에서 파티션을 통한 성능 최적화

 

MySQL은 대용량 데이터를 효율적으로 처리하기 위한 기능으로 파티셔닝(Partitioning)을 제공합니다. 파티션을 활용하면 테이블을 논리적으로 분할하여 쿼리 속도 향상, 백업 관리, 유지보수의 편의성을 크게 높일 수 있습니다.

 

파티션이란?

파티션은 하나의 테이블을 여러 개의 물리적인 단위로 나누는 기능입니다. 사용자는 여전히 하나의 테이블로 인식하지만, MySQL 내부적으로는 데이터가 분할 저장되어 검색 성능을 높일 수 있습니다.

파티션 사용 시 기대 효과

  • 쿼리 성능 향상: WHERE 조건에 따라 불필요한 파티션은 건너뜀
  • 빠른 백업/복구: 파티션 단위로 관리 가능
  • 데이터 정리 편리: 오래된 데이터 파티션만 DROP 가능

파티션의 종류

  • RANGE: 범위에 따라 파티션 분할
  • LIST: 지정된 값 목록에 따라 분할
  • HASH: 해시함수를 기반으로 분산
  • KEY: 내부 해시 알고리즘 기반 분산

RANGE 파티션 예시


CREATE TABLE sales (
  id INT,
  sale_date DATE
)
PARTITION BY RANGE (YEAR(sale_date)) (
  PARTITION p2019 VALUES LESS THAN (2020),
  PARTITION p2020 VALUES LESS THAN (2021),
  PARTITION p2021 VALUES LESS THAN (2022)
);
  

LIST 파티션 예시


CREATE TABLE users (
  id INT,
  region VARCHAR(10)
)
PARTITION BY LIST COLUMNS (region) (
  PARTITION seoul VALUES IN ('Seoul'),
  PARTITION busan VALUES IN ('Busan'),
  PARTITION other VALUES IN ('Others')
);
  

HASH 파티션 예시


CREATE TABLE logs (
  id INT,
  log_time DATETIME
)
PARTITION BY HASH(YEAR(log_time))
PARTITIONS 4;
  

파티션 사용 시 주의사항

  • 파티션 키를 포함하지 않은 WHERE 조건은 성능 이점이 없음
  • PRIMARY KEY 또는 UNIQUE KEY는 파티션 키를 포함해야 함
  • JOIN이나 GROUP BY 시 파티션이 오히려 성능에 불리할 수 있음
  • 파티션 테이블은 TRUNCATEALTER 시 제약이 있을 수 있음

파티션 유지 관리 팁

  • 주기적으로 오래된 파티션 DROP하여 공간 확보
  • ALTER TABLE ... REORGANIZE PARTITION을 활용해 파티션 재조정
  • 백업 시 개별 파티션 백업 전략 고려

 

 

MySQL 파티셔닝 기능은 대규모 테이블을 효과적으로 관리할 수 있는 강력한 수단입니다. 올바른 파티션 설계는 검색 성능 개선, 유지보수 단순화, 스토리지 효율화에 크게 기여할 수 있습니다. 다만, 구조 설계 전 파티션 키와 사용 패턴을 신중하게 검토해야 합니다.