oracle的全局索引(global)和本地索引(local)

全局索引和表是否为分区表、分区键值没有直接关系。也就是说,可以在非分区表上建立分区索引,在分区表上建立非分区索引。但是,如果建立分区索引,那么分区键必须和索引键相同。

建立测试表:

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 ;

经验分享 程序员 微信小程序 职场和发展