索引分区
--局部索引:每个表分区都有一个索引分区,并且只索引该分区表
局部前缀索引:无效的分区消除
局部非前缀索引:
都可以利用分区消除,都支持唯一性
--全局索引:索引按区间分区,一个索引可以指向任何表分区
要使用前缀索引必须使用一个分区消除的查询。
局部前缀索引能保证查询包含的谓词允许分区消除,而非前缀局部索引则不能保证。
---局部索引不能保证唯一性?
如果分区键是索引的一部分还是可以保证的是如果不是这样那就不能保证了,原因有两方面:
一:保证分区的可用和可扩展性
二:如果分区能保证唯一性,那么在oracle必须在事务级对这个表的插入和更新有效的进行串行化,如果想part_1中增加了ID=1的列那么必须组织在part_2中增加相同ID列,而实际上无法
通过这个分区的内容来保证。
partition by range(a)
create index local_prefixed on partition_table(a,b) local;---局部前缀索引
create index local_nonprefixed on partition_table(b) local;--局部非前缀索引
partition by range(timestamp,id)
create index index_partition2 on partitioned(timestamp,id) global partition by range(id)(partition .. ,partition ..less than(maxvalue))
maxvalue 确保底层中所有行均能放进分区中。
上面全局索引时不允许的,全局索引必须是 prefixed !
分区交换
alter table daodao add partition daodao_a with table daodao_temp1 INCLUDING INDEXS WITHOUT VALIDATION ;--将装载有与分区相同数据的表导入分区表中
这个操作之后全局索引是不可用的
还是没太明白局部前缀索引和局部非前缀索引以及全局索引的意义!!后面继续努力。。。。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30018455/viewspace-1426724/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30018455/viewspace-1426724/