全局索引和表是否为分区表、分区键值没有直接关系。也就是说,可以在非分区表上建立分区索引,在分区表上建立非分区索引。但是,如果建立分区索引,那么分区键必须和索引键相同。
建立测试表:
create table test(
id int,
name varchar2(20)
)
partition by range(id)
( partition p1 values less than (10),
partition p2 values less than (20),
partition p3 values less than (maxvalue)
);
可以在测试表上创建如下索引:
create index ig_test_id on test(id) tablespace test
global partition by range(id)
( partition p1 values less than (5),
partition p2 values less than (30),
partition p3 values less than (maxvalue)
);
或者
create index ighash_test_id on test(name) tablespace test
global partition by hash(name)
( partition p1,
partition p2,
partition p3
);
但是下面这种是错误的:
create index i_test_id on test(name) tablespace test
global partition by range(id)
( partition p1 values less than (5),
partition p2 values less than (30),
partition p3 values less than (maxvalue)
);
本地索引必须建在分区表上。索引键和表的分区键不必相同,但是索引的分区键和表的分区键一定相同。
可以按如下方式创建local索引:
create index ig_test_id on test(id) tablespace test local ;
或者
create index ig_test_id on test(name) tablespace test local ;