关于Oracle数据库表分区
参考:http://sishuok.com/forum/blogPost/list/6409.html#23117
1.
任何基表分区的增加、删除、合并、分割操作,或者散列分区增加或合并操作,Oracle会通过其自身的机制自动维护本地分区索引相应的分区,此即本地分区索引与基表的均衡性原则。
如果分区列能够形成索引列的一个子集,则本地分区索引可以是唯一索引。该限制能确保具有相同索引键的行始终映射到同一个分区,在该分区中,违反唯一性的行为能被检测到。
本地索引的优势有:
l在基表上执行除SPLIT PARTITION或ADD PARTITION 外的维护命令仅仅只有一个分区会被影响
l当分区表只有一个本地分区索引时,对分区进行维护操作的时间是与分区的大小成正比的
l本地分区索引支持分区的独立性
l只能本地分区索引支持单一分区数据的装入和卸出
l本地索引与基表的均衡性会给Oracle执行计划带来更好的性能
l表分区和各自的本地索引可以同时恢复
l分区表中的位图索引必须是本地索引,非分区表上不能建立分区位图索引
2.本地非前缀索引
全局分区索引
l当基表分区移动和删除(TRUNCATE、DROP、MOVE、SPLIT)时,全局索引的所有分区都受影响,也不支持分区依赖
l当基表分区或子分区恢复到某个时间点时,全局索引中所有相应入口也要恢复到相同的时间点。由于索引的分区或子分区的入口可能离散分布,其它分区或子分区混合型入口不恢复,除了重建索引之外没有办法完成
分区索引的使用建议
lOLTP系统中,全局索引和本地前缀索引因能减少分区探测的次数从而提供更好的性能
lOLTP系统中,当有表分区或子分区维护操作的时候,本地索引提供更好有效性;非前缀分区索引对于历史数据库非常有用
lDSS系统中,本地非前缀索引能提高性能,原因是依据范围的并发查询(如BETWEEN)能够并发的扫描到到更多索引分区
l历史表的索引尽可能采用本地索引,因此历史表上会有较规律的分区删除操作,而采用本地索引能降低这类操作的影响
l多列上的唯一索引必须是全局的,因为本地唯一非前缀索引的键要求分区键必须是索引键的子集,而此时就不是非前缀索引了而是前缀索引了
除了注重以上信息之外,另关注以下:
K: 没有建立本地前缀索引之前,查询已经可以达到分区裁剪了,如果建立本地前缀索引,查询范围比较大的,也未必适用本地前缀索引,查询范围很小的话,会使用本地前缀索引,而且性能比B-Tree性能好。
K: 对于分区表新增分区,不会影响全局索引;
K: 对于没有资料的新分区或者空分区,TRUNCATE/DROP/SPLIT不用影响全局索引;
K: SPLIT有数据的分区后,SPLIT涉及分区的本地索引需要重建;
K: 对于本地索引来说,本地非前缀索引可以建立唯一索引,只要包含表分区键就可以建立唯一索引;
K: 对于本地索引来说,不包含表分区键不可以建立唯一索引;
K: 对于分区索引来说,如果需要重建则需要一个一个分区重建;
K: 通常情况下,全局普通索引比本地非前缀索引要快一些!
K: 无法显式的删除本地索引的分区,删除的唯一方式是本地索引分区基表的分区被删除时由Oracle自动的隐式删除;
K: 如果全局索引分区是空的,则可以显式的删除它,使用的语句是ALTER INDEX index_name DROP PARTITION partition_name。但是,如果全局索引分区包含数据,删除则会引起更高级的分区(即下一个分区)变得不可用。如果非要这么做,则对更高级的分区需要重构;
K: 本地索引分区无法显式的拆分,其拆分的唯一途径是基表的分区拆分时由Oracle隐式的进行拆分;
K: 全局索引分区可以拆分,拆分完成后需要重构,但我们不推荐这么做。
K: 对于索引分区,切记不要通过MOVE指令来执行,虽然Oracle支持,建议一律先删除索引再重建;
K: ALTER TABLE xxx DROP PARTITION yyy UPDATE GLOBAL INDEXES 并不会影响DML操作;
参考:http://sishuok.com/forum/blogPost/list/6409.html#23117
局部索引local index
create index idx_ta_c2
on ta(c2) local
1.
2.
3.
4.
5.
如果要用局部索引去给表做唯一性约束,则约束中必须要包括分区键列
ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY
(SEQ_ID,PARTITION_ID) USING INDEX LOCAL;
6.
7.
8.
9.
全局索引global
index
create index idx_ta_c3 on ta(c3) global;
create index idx_ta_c3
on ta(c3) ;
1.
2.
3.
4.
5.
6.
oracle9i
alter table table_name
drop partition partition_name update global
indexes
7.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23192552/viewspace-1116142/ ,如需转载,请注明出处,否则将追究法律责任。