파티션 테이블에 대해 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 의 경우를 지원하지 않습니다.
▶▶▶ 로컬 파티션 인덱스 보기 ◀◀◀
▶▶▶ 오라클 파티션 종합 페이지 보기 ◀◀◀
'IT관련' 카테고리의 다른 글
오라클 파티션 Split/Merge/Coalesce 샘플 (0) | 2019.06.28 |
---|---|
오라클 파티션 Add/Drop/Modify/Truncate/Rename 샘플 (4) | 2019.06.28 |
오라클 Local Partitioned Index (로컬 파티션 인덱스) (0) | 2019.06.26 |
오라클 복합파티션(Composite Partition) Range + Range 샘플 (11g ~ ) (0) | 2019.06.23 |
오라클 복합파티션(Composite Partition) Range + List 샘플 (9i ~ ) (0) | 2019.06.23 |