oracle能一个分区一个分区建索引吗

解决方案 »

  1.   

    --创建分区表和分区索引
    创建表:
    create table test(
     c1 int,
     c2 varchar2(16),
     c3 varchar2(64),
     c4 int
     constraint pk_ta_c1 primary key(c1)
    )partition by range(c1)(
     partition p1 values less than(10000000),
     partition p2 values less than(20000000),
     partition p3 values less than(30000000),
     partition p4 values less than(maxvalue)
    );
    建立分区索引:
    create index idx_test_c2 on test(c2) local (partition p1,partition p2,partition p3,parition p4);
    或者create index idx_test_c2 on test(c2) local;
      

  2.   

    对索引进行分区有两种方法:
    1) 随表对索引完成相应的分区:这也称为局部分区索引(locally partitioned index)。
    每个表分区都有一个索引分区,而且只索引该表分区。一个给定索引分区中的所有条目都指向一个表分区,表分区中的所有行都表示在一个索引分区中。2)按区间对索引分区:这也称为全局分区索引(globally partitioned index)。
    索引按区间分区或者按散列(10g之后)分区,一个索引分区可能指向任何(和所有)表分区。
    由于全局索引只按区间或散列分区,如果希望有一个列表或组合分区索引,就必须使用局部索引。而局部索引会使用底层表相同的机制分区。使用LOCAL关键字创建局部分区索引。
    局部分区索引使用和基表相同的分区来保存索引。
    如果使用一个局部索引来保证惟一性约束(PRIMARY KEY或者UNIQUE),那么分区键必须包括在约束本身中。tony@ORA11GR2> create table t (x int, y int, data varchar2(32))
      2  partition by range (x) (
      3    partition part_1 values less than (2) tablespace ts1,
      4    partition part_2 values less than (3) tablespace ts2
      5  );
    Table created.tony@ORA11GR2> create index t_idx_local on t (x, y) local;
    Index created.