데이터베이스 파티셔닝 (Database Partitioning)

파티셔닝은 큰 테이블이나 인덱스를 더 작고 관리하기 쉬운 단위로 나누는 것.

정의와 목적

파티셔닝은 큰 테이블이나 인덱스를 더 작은 관리 가능한 단위인 ‘파티션’으로 나누는 것을 의미한다.

주요 목적은 다음과 같다:

  • 성능 향상
  • 가용성 증대
  • 관리 용이성 개선

파티셔닝의 유형

  1. 수평 파티셔닝 (Horizotal Partitioning):

    • 행 단위로 데이터를 분할
    • 샤딩(Sharding)과 유사한 개념
  2. 수직 파티셔닝 (Vertical Partitioning):

    • 열 단위로 데이터를 분할
    • 자주 사용되는 컬럼을 별도로 저장

파티셔닝 방법

  1. 범위 분할 (Range Partitioning):

    • 연속적인 숫자나 날짜를 기준으로 분할
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    -- 날짜 기준 범위 파티셔닝
    CREATE TABLE sales (
        sale_id INT,
        sale_date DATE,
        amount DECIMAL(10,2)
    ) PARTITION BY RANGE (YEAR(sale_date)) (
        PARTITION p2022 VALUES LESS THAN (2023),
        PARTITION p2023 VALUES LESS THAN (2024),
        PARTITION p2024 VALUES LESS THAN MAXVALUE
    );
    
    -- 특정 파티션의 데이터만 조회
    SELECT * FROM sales PARTITION(p2023)
    WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31';
    
  2. 목록 분할 (List Partitioning):

    • 특정 값 목록을 기준으로 분할
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    -- 지역별 리스트 파티셔닝
    CREATE TABLE customers (
        customer_id INT,
        name VARCHAR(100),
        region VARCHAR(50)
    ) PARTITION BY LIST (region) (
        PARTITION p_east VALUES IN ('New York', 'Boston', 'Philadelphia'),
        PARTITION p_west VALUES IN ('Los Angeles', 'San Francisco', 'Seattle'),
        PARTITION p_central VALUES IN ('Chicago', 'Detroit', 'Houston')
    );
    
  3. 해시 분할 (Hash Partitioning):

    • 해시 함수를 사용하여 균등하게 분할
    1
    2
    3
    4
    5
    6
    7
    
    -- 고객 ID 기준 해시 파티셔닝
    CREATE TABLE orders (
        order_id INT,
        customer_id INT,
        order_date DATE
    ) PARTITION BY HASH(customer_id)
    PARTITIONS 4;
    

장점

  • 쿼리 성능 향상
  • 데이터 가용성 증가
  • 관리 용이성 개선
  • 백업 및 복구 효율성 증대

단점

  • 테이블 간 조인 비용 증가
  • 설계 복잡성 증가
  • 일부 제약 조건 적용의 어려움

참고 및 출처