본문 바로가기

IT관련

오라클 Global Partitioned Index (글로벌 파티션 인덱스)

파티션 테이블에 대해 2가지 종류의 파티션 인덱스를 생성할 수 있습니다.

 

    - Local Partitioned Index (지역 파티션 인덱스, 로컬 인덱스)

    - Global Partitioned Index (전역 파티션 인덱스, 글로벌 인덱스)

 

글로벌 인덱스는 로컬 인덱스와 달리 파티션테이블의 파티션 구성을 따르지 않습니다.

글로벌 인덱스는 아래와 같이 생성할 수 있습니다.

 

-- 1) 파티션 테이블 생성
create table SALES (
  sales_no       number,
  sale_year      number,
  sale_month     number,
  sale_day       number,
  customer_name  varchar2(30),
  birth_date     date,
  price          number
)
partition by range (sales_no)
(
  partition SALES_P1 values less than (3),
  partition SALES_P2 values less than (5),
  partition SALES_P3 values less than (maxvalue)
);

-- 2) 글로벌 파티션 인덱스 생성
create index IDX_SALES_02 on SALES (customer_name) GLOBAL
partition by hash (customer_name)
partitions 4;

 

SALES 테이블의 customer_name 컬럼을 기준으로 Hash 파티션 인덱스를 만드는 샘플입니다.

SALES 테이블은 sales_no 컬럼을 파티션키로하는 Range 파티션 되어 있는데, 인덱스 만들때는 완전히 다른 파티션키, 다른 방식의 파티션을 만들고자 할때, 글로벌 인덱스를 생성합니다.

 

 

IDX_SALES_02 파티션 인덱스에 4개의 파티션이 만들어졌네요. 파티션명을 따로 지정하지 않아 시스템이 임으로 이름을 지정했습니다.

 

파티션명을 지정해서 생성할 수도 있습니다.

 

create index IDX_SALES_02 on SALES (customer_name) GLOBAL
partition by hash (customer_name)
(
  partition IDX_SALES_02_P1,
  partition IDX_SALES_02_P2,
  partition IDX_SALES_02_P3,
  partition IDX_SALES_02_P4
);

 

아래와 같이 글로벌 인덱스를 Range 파티션으로 구성할 수도 있습니다.

 

create index IDX_SALES_02 on SALES (customer_name) GLOBAL
partition by range (customer_name)
(
  partition SALES_P1 values less than ('G'),
  partition SALES_P2 values less than ('M'),
  partition SALES_P3 values less than (maxvalue)
);

 

인덱스의 컬럼키의 일부만 가지고 파티션키로 사용해도 됩니다.

 

create index IDX_SALES_02 on SALES (customer_name, birth_date) GLOBAL
partition by range (customer_name)
(
  partition SALES_P1 values less than ('G'),
  partition SALES_P2 values less than ('M'),
  partition SALES_P3 values less than (maxvalue)
);

 

위에서는 인덱스 컬럼키는 customer_name + birth_date 와 같이 결합인덱스이고, 이중에서 customer_name 만 파티션키로 사용해서 파티션 인덱스를 만들었습니다.

일부를 사용하는 경우, 인덱스의 첫번째 컬럼이 인덱스 파티션키와 같아야 합니다.

아래와 같이 인덱스의 첫번째 컬럼이 파티션키로 시작하지 않는 경우, 에러가 납니다.

 

 

위 에러에 보면 prefixed 라는 용어가 나왔는데, 굳이 꼭 알 필요는 없지만.. 정리하자면 아래와 같습니다.

 

* Prefixed / Non-prefixed
  1) Prefixed : 인덱스 첫 번째 컬럼이 인덱스 파티션 키와 같음
  2) Non-prefixed : 인덱스 첫 번째 컬럼이 인덱스 파티션 키와 다름

  ※ Partitioned Index 생성시 Prefixed/Non-prefixed에 대한 지정은 하지 않으며
     위와 같은 Rule로 만들어 졌는지 여부를 DBMS가 확인하여 Dictionary 에 기록하고 관리하게 됩니다.

 

즉, 글로벌 인덱스는 Prefixed 만 지원합니다. Non-prefixed 의 경우를 지원하지 않습니다.

 

 

로컬 파티션 인덱스 보기

 오라클 파티션 종합 페이지 보기