日期:2014-05-16  浏览次数:20411 次

Oracle创建分区索引总结

全局索引
============
CREATE INDEX month_ix ON sales(sales_month)

本地索引
============
CREATE INDEX loc_dept_ix ON dept(deptno) LOCAL;

全局分区索引
============
CREATE INDEX month_ix ON sales(sales_month)
? ?GLOBAL PARTITION BY RANGE(sales_month)
? ?? ?(PARTITION pm1_ix VALUES LESS THAN (2)
? ?? ? PARTITION pm2_ix VALUES LESS THAN (3)
? ?? ? PARTITION pm3_ix VALUES LESS THAN (4)
? ?? ? PARTITION pm4_ix VALUES LESS THAN (5)
? ?? ? PARTITION pm5_ix VALUES LESS THAN (6)
? ?? ? PARTITION pm6_ix VALUES LESS THAN (7)
? ?? ? PARTITION pm7_ix VALUES LESS THAN (8)
? ?? ? PARTITION pm8_ix VALUES LESS THAN (9)
? ?? ? PARTITION pm9_ix VALUES LESS THAN (10)
? ?? ? PARTITION pm10_ix VALUES LESS THAN (11)
? ?? ? PARTITION pm11_ix VALUES LESS THAN (12)
? ?? ? PARTITION pm12_ix VALUES LESS THAN (MAXVALUE));

分区表和一般表一样可以建立索引,分区表可以创建局部索引和全局索引。当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引。
3.1? ???局部索引分区的建立:
SQL> create index dinya_idx_t on dinya_test(item_id)
??2??local
??3??(
??4? ???partition idx_1 tablespace dinya_space01,
??5? ???partition idx_2 tablespace dinya_space02,
??6? ???partition idx_3 tablespace dinya_space03
??7??);

Index created.


3.2? ???全局索引分区的建立。
全局索引建立时global 子句允许指定索引的范围值,这个范围值为索引字段的范围值:
SQL> create index dinya_idx_t on dinya_test(item_id)
??2??global partition by range(item_id)
??3??(
??4? ???partition idx_1 values less than (1000) tablespace dinya_space01,
??5? ???partition idx_2 values less than (10000) tablespace dinya_space02,
??6? ???partition idx_3 values less than (maxvalue) tablespace dinya_space03
??7??);

Index created.

??????? 本例中对表的item_id字段建立索引分区,当然也可以不指定索引分区名直接对整个表建立索引,如:
SQL> create index dinya_idx_t on dinya_test(item_id);

Index created.

一,分区索引分为2类:
1、global,它必定是Prefix的。不存在non-prefix的
2、local,它又分成2类:
? 2.1、prefix:索引的第一个列等于表的分区列。
? 2.2、non-prefix:索引的第一个列不等于表的分区列。

??
LOCAL的索引只能是表的分区方式,不能自己写分区方式。他们是EQUI-Partition的。GLOBAL索引可以不分区,这个时候就是普通的一个索引。同一个列只能只有一个索引,这个列可以是GLOBAL或者是LOCAL的索引。如果唯一索引所在的列不是表的分区列,只能建立GLOBAL索引。

例如:分区表
create table test (id number,data varchar2(100))
partition by RANGE (id)
(