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/

原文地址:https://www.cnblogs.com/jslee/p/3420986.html