728x90
파티셔닝
테이블을 논리적으로 여러 개의 작은 조각으로 나누는 방법
각 조각을 '파티션'이라고 부르며, 이러한 파티션들은 독립적으로 관리될 수 있다.
파티셔닝을 통해 데이터를 분산시켜 특정 쿼리의 성능을 최적화할 수 있다.
물리적으로는 여러 테이블로 분산하여 저장되지만, 사용자는 하나의 테이블에 접근하는 것과 같이 사용할 수 있다.
Range 파티셔닝
특정 범위에 따라 데이터를 분할
ex) 날짜, 숫자의 범위
CREATE TABLE orders (
order_id INT,
order_date DATE,
customer_id INT
)
PARTITION BY RANGE (YEAR(order_date)) (
PARTITION p0 VALUES LESS THAN (2020),
PARTITION p1 VALUES LESS THAN (2021),
PARTITION p2 VALUES LESS THAN (2022),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
List 파티셔닝
지정된 값 목록에 따라 데이터를 분할
주로 카테고리나 상태 값과 같은 데이터를 분할하는 데 사용된다.
CREATE TABLE orders (
order_id INT,
status VARCHAR(20),
customer_id INT
)
PARTITION BY LIST (status) (
PARTITION p0 VALUES IN ('new', 'processing'),
PARTITION p1 VALUES IN ('shipped', 'completed'),
PARTITION p2 VALUES IN ('cancelled')
);
Hash 파티셔닝
해시 함수를 사용하여 데이터를 분할
데이터가 고르게 분산되도록 보장하는 데 유용
MySQL 공식 문서에 따르면, 여러 컬럼으로 해싱하는 것은 크게 권장하지 않는다고 한다 (참고).
CREATE TABLE orders (
order_id INT,
customer_id INT,
order_date DATE
)
PARTITION BY HASH(order_id) PARTITIONS 4;
Composite 파티셔닝
위 파티셔닝 종류 중 두개 이상을 사용하는 방식
아래는 Rangs-Hash 파티셔닝의 예시이다.
order 테이블을 연도별로 Range 파티셔닝 후, 각 연도 파티션 내에서 hash 파티셔닝을 수행한다.
CREATE TABLE orders (
order_id INT,
order_date DATE,
customer_id INT
)
PARTITION BY RANGE (YEAR(order_date))
SUBPARTITION BY HASH(order_id)
SUBPARTITIONS 4 (
PARTITION p0 VALUES LESS THAN (2020),
PARTITION p1 VALUES LESS THAN (2021),
PARTITION p2 VALUES LESS THAN (2022),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
728x90
'Backend 🧦 > Database ⛱️' 카테고리의 다른 글
DB 성능테스트 Tool 비교 (0) | 2024.05.24 |
---|
댓글