分区表
组合分区
组合分区又称为复合分区,是使用三种基本分区策略在一种分区的基础上再进行二次分区,即子分区。对于某个分区的子分区来说,其实际上是该分区数据的逻辑子集。组合分区支持历史操作,如增加新的范围分区,其同时也支持更细粒度的分区修剪。
1.复合范围-范围分区
复合范围-范围分区允许在两个维度的逻辑范围内分区。其语法:
2.复合范围-散列分区
主分区按范围分区,每个子分区按散列分区。该方式不但改进了范围分区的可管理性,同时也带来了散列分区数据的均匀化,提升了并发性能,其语法为:
表为ACCOUNT_TRADE_CRH,方法同前。
参见附件脚本2
3.复合范围-列表分区
主分区按范围分区,每个子分区按列表分区,其语法为:
表为ACCOUNT_TRADE_CRL,方法同前,
参见附件例子3,分区数据浏览见toad中演示。
4.复合列表-范围分区
主分区按列表分区, 每个子分区按范围 分区,其语法为:
5.复合列表-散列分区
主分区按列表分区,每个子分区按散列分区,其语法为:
6.复合列表-列表分区
主分区按列表分区,每个子分区也按列表分区,其语法为:
本地分区索引
任何基表分区的增加、删除、合并、分割操作,或者散列分区增加或合并操作,Oracle会通过其自身的机制自动维护本地分区索引相应的分区,此即本地分区索引与基表的均衡性原则。
如果分区列能够形成索引列的一个子集,则本地分区索引可以是唯一索引。该限制能确保具有相同索引键的行始终映射到同一个分区,在该分区中,违反唯一性的行为能被检测到。
本地索引的优势有:
l在基表上执行除SPLIT PARTITION或ADD PARTITION
外的维护命令仅仅只有一个分区会被影响
l当分区表只有一个本地分区索引时,对分区进行维护操作的时间是与分区的大小成正比的
l本地分区索引支持分区的独立性
l只能本地分区索引支持单一分区数据的装入和卸出
l本地索引与基表的均衡性会给Oracle执行计划带来更好的性能
l表分区和各自的本地索引可以同时恢复
l分区表中的位图索引必须是本地索引,非分区表上不能建立分区位图索引
1.本地前缀索引
2.本地非前缀索引
3.语法
4.示例
全局分区索引
全局索引往往与基表是不均衡的,如果要追求二者的均衡性,只能使用本地分区索引。全局分区的索引类型只能是b-tree索引,不能是bitmap索引。正是因为其是b-tree索引,所以无论其指向多少个分区抑或多少行,也只有一个b-tree入口,每个索引分区中会再包含指向具体表分区或子分区中的行的键。
全局分区索引必须是前缀的,不支持非前缀的。其中,前缀的意思和本地分区索引的前缀的含义相同,即“前缀索引是指以索引列的左前缀来分区的”。
1.语法
2.示例
管理全局分区索引
l当基表分区移动和删除(TRUNCATE、DROP、MOVE、SPLIT)时,全局索引的所有分区都受影响,也不支持分区依赖
l当基表分区或子分区恢复到某个时间点时,全局索引中所有相应入口也要恢复到相同的时间点。由于索引的分区或子分区的入口可能离散分布,其它分区或子分区混合型入口不恢复,除了重建索引之外没有办法完成
分区索引的使用建议
lOLTP系统中,全局索引和本地前缀索引因能减少分区探测的次数从而提供更好的性能
lOLTP系统中,当有表分区或子分区维护操作的时候,本地索引提供更好有效性;非前缀分区索引对于历史数据库非常有用
lDSS系统中,本地非前缀索引能提高性能,原因是依据范围的并发查询(如BETWEEN)能够并发的扫描到到更多索引分区
l历史表的索引尽可能采用本地索引,因此历史表上会有较规律的分区删除操作,而采用本地索引能降低这类操作的影响
l多列上的唯一索引必须是全局的,因为本地唯一非前缀索引的键要求分区键必须是索引键的子集,而此时就不是非前缀索引了而是前缀索引了
习题
1.什么是组合分区,其与单一分区的差别是什么?什么时候需要使用组合分区?
2.常用的组合分区包括那六种类型,它们分别是什么?为什么没有Hash-*类型的组合分区?
3.请对课程中6种组合分区进行逐一演练。
4.本地分区索引的特种是什么?为什么说其与基表的分区具有均衡性,试着用第3提的例子通过SELECT语句举例说明。
5.假设表A是复合分区,其分区基于colA,子分区基于colB,那么在colB上建立的本地分区索引是那种类型?