分区索引分为本地(local index)索引和全局索引(global index)。
?
其中本地索引又可以分为有前缀(prefix)的索引和无前缀(nonprefix)的索引。而全局索引目前只支持有前缀的
索引。
?
创建了一个分区表后,如果需要在表上面创建索引,并且索引的分区机制和表的分区机制一样,那么这样的
索引就叫做本地分区索引。本地索引是由ORACLE自动管理的,它分为有前缀的本地索引和无前缀的本地索
引。什么叫有前缀的本地索引?有前缀的本地索引就是包含了分区键,并且将其作为引导列的索引。什么叫
无前缀的本地索引?无前缀的本地索引就是没有将分区键的前导列作为索引的前导列的索引。
?
create index i_id on test(id) local; 因为id是分区键,所以这样就创建了一个有前缀的本地索引。
create index i_data on test(data) local;因为data不是分区键,所以这样就创建了一个无前缀的本地
索引。
?
本地分区索引不同的是,全局分区索引的分区机制与表的分区机制不一样。全局分区索引全局分区索引只能
是B树索引,到目前为止(10gR2),oracle只支持有前缀的全局索引。全局索引必须是前缀索引,即全局索引
的索引列必须是以索引分区键作为其前几列。另外oracle不会自动的维护全局分区索引,当我们在对表的分
区做修改之后,如果执行修改的语句不加上update global indexes的话,那么索引将不可用。
?
为什么要用全局分区索引?
?
?
本地分区非键值索引,查找时无法提供表分区键。会每个分区都会找,效率低,怎么办呢,,用全局分区索
引呗!
全局的话,就是索引跨越分区表,在做跨分区查询优势快。
局部的话,分区表某个分区的索引,速度比全局快,而且维护更方便。
?