파티셔닝

parkrootseok·2025년 4월 10일
0

데이터베이스

목록 보기
8/10
post-thumbnail

파티셔닝이란?

파티셔닝은 대용량 데이터를 보다 효율적으로 저장하고 관리하기 위해, 특정 기준에 따라 테이블이나 인덱스를 물리적으로 나누는 기술입니다.테이블 또는 인덱스 크기가 커짐에 따라 발생하는 성능 저화 및 관리 어려움 등의 문제를 해결하기 위해 사용합니다.

샤딩과 차이점은 무엇인가요?
샤딩은 DB 자체를 여러 개로 나누어 분산시키는 기술이고, 파티셔닝은 하나의 DB 안에서 테이블이나 인덱스를 물리적으로 분할하는 기술입니다. 즉, 샤딩은 서버 단위 분산, 파티셔닝은 테이블 단위 분할입니다.

파티셔닝 종류

Range Partition

Range Partition은 범위 기준으로 분할하는 방법입니다. 예시로, 날짜와 금액 등이 있습니다.

예시

CREATE TABLE user_log (
  id BIGINT NOT NULL,
  user_id BIGINT NOT NULL,
  created_at DATE NOT NULL
)

PARTITION BY RANGE (YEAR(created_at)) (
  PARTITION p2022 VALUES LESS THAN (2023),
  PARTITION p2023 VALUES LESS THAN (2024),
  PARTITION p2024 VALUES LESS THAN (2025),
  PARTITION pmax  VALUES LESS THAN MAXVALUE
);

List Partition

List Partition은 특정 값을 기준으로 분할하는 방법입니다. 예시로, 지역과 상태값 등이 있습니다.

예시

CREATE TABLE store (
  id BIGINT NOT NULL,
  region VARCHAR(20) NOT NULL
)

PARTITION BY LIST COLUMNS (region) (
  PARTITION seoul VALUES IN ('SEOUL'),
  PARTITION busan VALUES IN ('BUSAN'),
  PARTITION daegu VALUES IN ('DAEGU')
);

Hash Partition

Hash Partition은 해시 함수를 이용해 균등 분할하는 방법입니다. 예시로, 사용자 ID, 주문번호 등이 있습니다.

예시

CREATE TABLE user (
  id BIGINT NOT NULL,
  name VARCHAR(100),
  user_id BIGINT NOT NULL
)

PARTITION BY HASH(user_id) PARTITIONS 4;

파티셔닝 사용 시 주의할 점

파티션 키 선정

SELECT, WHERE 절에 사용하지 않는 컬럼을 파티션 키로 사용할 경우, 오히려 성능이 저하될 수 있습니다. 왜냐하면, 파티션 프루닝이 동작하지않아 전체 파티션을 조회하기 때문입니다.

파티션 프루닝이란?
파티션 프루닝은 쿼리 실행 시 WHERE 절에 따라 필요한 파티션만 선택해서 조회하는 최적화 기법입니다. 즉, DB가 알아서 불필요한 파티션은 건너뛰고 필요한 파티션만 조회하는 것을 말합니다.

파티션 수

파티션 개수가 지나치게 많다면 메타데이터 관리 비용이 증가하고, 쿼리 수행 시 Overhead가 발생할 수 있습니다. MySQL을 기준으로 10 ~ 100개 이하로 관리하는 것을 권장합니다.

Join, Group By, Order By 주의

파티션 키가 다를 경우 Join, Group By, Order By 쿼리 성능이 오히려 저하될 수 있습니다. 왜냐하면, 여러 파티션을 모두 조회하고 병합하는 과정이 필요하기 때문입니다.

profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글