파티셔닝 추가 내용.

1. Local vs. Global Partitioned Indexes (로컬 vs. 글로벌 파티션 인덱스)

Oracle Partitioning에서는 인덱스를 로컬 인덱스와 글로벌 인덱스로 나눌 수 있습니다.

  • 로컬 인덱스: 파티션마다 별도의 인덱스를 가지고 있습니다. 특정 파티션에 접근할 때 해당 인덱스만 사용하므로 관리가 용이하고 성능이 좋습니다.

    CREATE INDEX sales_idx ON sales(sale_date) LOCAL;
  • 글로벌 인덱스: 모든 파티션을 통합하여 하나의 인덱스로 관리합니다. 파티셔닝 키 이외의 열을 자주 검색할 때 유용합니다.

    CREATE INDEX global_sales_idx ON sales(amount) GLOBAL;

2. Interval Partitioning (간격 파티셔닝)

기존의 Range Partitioning을 개선한 기법으로, 새로운 값이 추가되면 자동으로 새로운 파티션을 생성합니다. 이 기능은 주기적인 데이터 추가가 있는 환경에서 매우 유용합니다.

CREATE TABLE sales ( sale_id NUMBER, sale_date DATE, amount NUMBER ) PARTITION BY RANGE (sale_date) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) ( PARTITION p1 VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD')) );

위 예제에서 새로운 월의 데이터가 추가되면 자동으로 새로운 파티션이 생성됩니다.

3. Reference Partitioning (참조 파티셔닝)

외래 키 관계를 기반으로 두 테이블을 파티셔닝할 때 사용됩니다. 부모 테이블의 파티셔닝 구조를 자식 테이블이 따릅니다.

CREATE TABLE orders ( order_id NUMBER, customer_id NUMBER, order_date DATE ) PARTITION BY RANGE (order_date); CREATE TABLE order_items ( order_id NUMBER, product_id NUMBER, quantity NUMBER, CONSTRAINT fk_order FOREIGN KEY (order_id) REFERENCES orders(order_id) ) PARTITION BY REFERENCE (fk_order);

위 예제에서 order_items 테이블은 orders 테이블의 파티셔닝 구조를 그대로 따릅니다.

4. Subpartitioning (서브파티셔닝)

복합적인 파티셔닝을 적용하여, 하나의 파티션 내에서 추가로 파티셔닝을 수행하는 방식입니다. 예를 들어, 먼저 범위로 나누고, 그 후에 해시로 다시 분할할 수 있습니다.

CREATE TABLE transactions ( trans_id NUMBER, trans_date DATE, region VARCHAR2(50) ) PARTITION BY RANGE (trans_date) SUBPARTITION BY HASH (region) SUBPARTITIONS 4 ( PARTITION p1 VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD')), PARTITION p2 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')) );

이 방식은 데이터의 균등한 분포를 유지하면서도 범위 기준의 효율적인 조회가 필요할 때 사용됩니다.

5. List Partitioning (리스트 파티셔닝) 심화

List Partitioning은 Oracle Partitioning에서 데이터를 명시적으로 정의된 값 목록에 따라 파티션으로 나누는 방식입니다. 주로 범주형 데이터 또는 그룹으로 나눌 수 있는 데이터에 사용됩니다. 예를 들어, 지역, 제품군, 고객 유형 등의 데이터를 기준으로 파티셔닝할 때 적합합니다.

List Partitioning의 특징

  • 명확한 값 기반 분할: 데이터 값이 명확하게 구분되는 경우, 리스트 파티셔닝을 통해 각 값 그룹을 개별 파티션으로 관리할 수 있습니다.
  • 유연성: 새로운 값이 추가될 때 파티션을 동적으로 확장하거나 새로운 파티션을 추가할 수 있습니다.
  • 쿼리 최적화: 특정 값만 검색할 때 관련 파티션에만 접근하므로 성능이 향상됩니다.

List Partitioning의 예시

다음은 Oracle에서 List Partitioning을 사용하는 예제입니다. 예를 들어, 고객 데이터를 지역별로 분할한다고 가정해보겠습니다:

CREATE TABLE customers ( customer_id NUMBER, customer_name VARCHAR2(100), region VARCHAR2(50) ) PARTITION BY LIST (region) ( PARTITION east VALUES ('East', 'Northeast', 'Southeast'), PARTITION west VALUES ('West', 'Northwest', 'Southwest'), PARTITION central VALUES ('Central', 'Midwest'), PARTITION others VALUES (DEFAULT) );

위 예제에서, region 값을 기준으로 고객 데이터를 여러 파티션으로 분할합니다. 각 파티션은 하나 이상의 값을 가질 수 있으며, 예를 들어 east 파티션에는 'East', 'Northeast', 'Southeast'가 포함됩니다.

List Partitioning의 추가 기능

  1. DEFAULT 파티션: 지정된 값 외에 다른 모든 값을 처리하는 "기본" 파티션을 정의할 수 있습니다. 이는 예상하지 못한 값이 추가되었을 때 유용합니다.

    • 예제에서 others 파티션은 명시된 값 목록에 없는 모든 데이터를 수용합니다.
  2. Multi-level List Partitioning (다단계 리스트 파티셔닝): List Partitioning은 다른 파티셔닝 전략과 결합하여 더 복잡한 분할 구조를 만들 수 있습니다. 예를 들어, 리스트 파티셔닝 후, 각 파티션을 다시 해시나 범위로 서브파티셔닝할 수 있습니다.

    CREATE TABLE orders ( order_id NUMBER, order_date DATE, region VARCHAR2(50) ) PARTITION BY LIST (region) SUBPARTITION BY RANGE (order_date) ( PARTITION east VALUES ('East', 'Northeast', 'Southeast') ( SUBPARTITION p_east_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')), SUBPARTITION p_east_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')) ), PARTITION west VALUES ('West', 'Northwest', 'Southwest') ( SUBPARTITION p_west_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')), SUBPARTITION p_west_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')) ) );

    이 구조는 지역을 기준으로 리스트 파티셔닝한 다음, 각 지역 데이터를 다시 연도별로 범위 서브파티셔닝합니다. 이를 통해 데이터 관리와 쿼리 성능을 극대화할 수 있습니다.

댓글 쓰기

댓글 목록