DB

[DB] 파티셔닝(Partitioning) 이란?

seoeunpapa 2025. 1. 17. 00:03
728x90

 

파티셔닝 (Partitioning)

파티셔닝은 데이터베이스 테이블을 논리적으로 나누는 기술입니다. 데이터는 여러 개의 "파티션"으로 나뉘지만, 사용자 입장에서는 여전히 하나의 테이블처럼 보입니다. 주로 대규모 데이터를 관리하고 성능을 최적화하기 위해 사용됩니다.


파티셔닝의 주요 목적

  1. 쿼리 성능 향상: 특정 파티션만 검색하면 되므로 성능이 개선됩니다.
  2. 효율적 관리: 오래된 데이터는 별도 파티션으로 이동하거나 삭제할 수 있어 관리가 용이합니다.
  3. 병렬 처리: 파티션별로 작업을 병렬로 수행하여 처리 속도가 빨라집니다.

파티셔닝의 종류

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 p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025),
    PARTITION p2025 VALUES LESS THAN MAXVALUE
);

 

 

2. 리스트 파티셔닝 (List Partitioning)
특정 값을 기준으로 데이터를 나눕니다.
예) 국가, 카테고리

CREATE TABLE customers (
    customer_id INT,
    name VARCHAR(50),
    country VARCHAR(50)
)
PARTITION BY LIST (country) (
    PARTITION asia VALUES IN ('Korea', 'Japan', 'China'),
    PARTITION europe VALUES IN ('Germany', 'France', 'UK'),
    PARTITION america VALUES IN ('USA', 'Canada', 'Mexico')
);

 

 

3. 해시 파티셔닝 (Hash Partitioning)
해시 함수를 사용해 데이터를 고르게 나눕니다.
예) ID 기반

CREATE TABLE products (
    product_id INT,
    product_name VARCHAR(50)
)
PARTITION BY HASH (product_id) PARTITIONS 4;

 

 

4. 조합 파티셔닝 (Composite Partitioning)
두 가지 이상의 방식을 결합.
예) 범위 + 해시

CREATE TABLE sales (
    sale_id INT,
    sale_date DATE,
    product_id INT
)
PARTITION BY RANGE (YEAR(sale_date))
SUBPARTITION BY HASH (product_id) SUBPARTITIONS 2 (
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025)
);

파티셔닝의 장점

  • 효율적인 데이터 조회: 관련 없는 파티션은 건너뛰어 검색 속도가 빠름.
  • 유지 보수 편리: 오래된 데이터 파티션만 삭제하거나 백업 가능.
  • 병렬 작업: 각 파티션에 대해 병렬 쿼리 실행 가능.

파티셔닝의 단점

  • 설계 복잡성: 잘못 설계하면 데이터 접근 성능이 오히려 나빠질 수 있음.
  • 제약 조건 제한: 일부 데이터베이스에서 파티션된 테이블은 외래 키 제약이 제한적.
  • 추가적인 관리: 파티션 관리를 위한 작업이 필요.

파티셔닝 예제 시나리오

로그 데이터 관리

로그 데이터를 날짜별로 관리하려고 합니다. 2023년, 2024년, 2025년 데이터를 각각 별도의 파티션에 저장하여 오래된 데이터 관리와 쿼리 성능을 최적화할 수 있습니다.

CREATE TABLE logs (
    log_id INT,
    log_date DATE,
    log_message TEXT
)
PARTITION BY RANGE (YEAR(log_date)) (
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025),
    PARTITION p2025 VALUES LESS THAN MAXVALUE
);

예제: 데이터 삽입 및 조회

데이터 삽입

INSERT INTO logs (log_id, log_date, log_message)
VALUES
(1, '2023-06-15', 'System initialized'),
(2, '2024-03-20', 'User login successful'),
(3, '2025-01-10', 'Database backup completed');

 

데이터 조회
특정 연도의 로그 데이터 조회:

SELECT * FROM logs
WHERE log_date BETWEEN '2024-01-01' AND '2024-12-31';

 

오래된 데이터 삭제
2023년 데이터 삭제:

ALTER TABLE logs DROP PARTITION p2023;

 


파티셔닝이 적합한 사용 사례

  1. 대규모 로그 저장: 날짜별로 분리하여 오래된 데이터를 손쉽게 삭제.
  2. 데이터웨어하우스: 시간, 지역, 카테고리별로 파티션.
  3. 전자상거래 시스템: 카테고리, 가격 범위에 따라 데이터 분리.

 

 

 

728x90