oracle分区原理
1.分区概述
1)可用性提高
当一个分区不可用(磁盘出故障等),优化器知道有这个分区机制,会相应的从查询计划中去除这个分区。提高整个表的可用性。
2)减少管理负担
假如需要重建一个100GB的表:
*需要在某处存放100GB的空闲存储空间来存储它的副本。
*需要一个临时事务日志表来记录重建索引期间对基表的修改。
*假如在过程中出现故障,一切都付之东流。
但是当分区后就会减小这些负担。
3)改善语句性能
在数据仓库系统中,会执行并行DML,如果分区后,执行一个DELETE时,它会开启多个线程或进程来并行执行。这样效率更高。
在OLTP系统中,效果不明显,因为很少用并行DML。但是在OLTP中可以减少数据在多个分区中冲突的可能性 。
4)均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;
2.分区机制
1、范围分区
当列数据可以被划分为逻辑范围时(例如年度中的月份),就可以使用范围分区。当数据在整个范围中能被均等地划分时性能最好。如果所划分的分区范围大小明显不同时,则需要考虑其他的分区方法了。
2、散列分区
当数据不太容易进行范围划分时,为了性能和管理的原因又想分区时,就可以使用散列分区方法。散列分区将在指定数量的分区中均等得划分数据。创建散列分区需要指定分区列、分区数量(或单独的分区描述)
3、列表分区
当需要明确得控制如何将行映射到分区时,就需要使用列表分区。可以在每个分区表述中为该分区指定一列离散值。
列表分区与范围分区、散列分区的区别在于
● 范围分区为分列假设了一个值的自然范围,无法将该值范围之外的分区组织在一起
● 散列分区无法对数据的划分进行控制,在逻辑上是无须的
eg: 人的表,把所有男性放一个分区中,把所有女性放一个分区中,把不男不女的放一个分区中。
4、组合分区
组合分区是在分区中使用范围分区,而在子分区中使用散列分区。组合分区很适合于历史数据和条块数据两者,改善了范围分区及其数据放置的管理型。
5、引用分区
引用分区可以使子表创建和父表一样的分区机制,而不要有相同的列。
如果您希望按照父表分区的方式对子表进行分区,但没有相同的列,您又不想仅仅为了分区而引入这些列,此时引用分区将非常方便。而且,您不必针对每个子表显式声明一个很长的分区子句。
参考:oracle Database 9i/10g/11g编程艺术 深入数据库体系结构
http://blog.163.com/zhubinbin0516@126/blog/static/12257726201051735823602/