深入浅出:Oracle表分区(oracle的表分区)
Oracle数据库表分区是把数据库表中的数据按某种方式把数据逻辑拆分成多个逻辑区域,物理存储不同的分区,从而使用多个文件或者物理存储器来保存表的数据。
Oracle数据库表的分区有很多种,他们中的一些主要有:Range Partition,List Partion,Hash Partition,Interval Partition ,Composite Partition。
Range Partition,该分区是把一个表的数据按照一个字段进行“分区标记”的值,一般以比较该字段的上限和下限来进行分区,如范围从1到100,那么可以把1~20戏为一个分区,21-40为一个分区,41-60为另一个分区,依次类推。
List Partion 按照范围分区的另一种方式,而不是分段划分,而是把列表中精确指定的值或者其中的一部分值来作为一个单独的子分区,这种分区方式常用在分区的取值比较少的情况。
Hash Partition,根据选定的字段值求出一个Hash值,然后把该Hash值分配到某几个分区就形成一个分区,这种分区方式有利于提高表中数据的分布性,使得表中数据均匀地分布在不同的分区中。
Interval Partition把多个表分成一些时间区间表,因为分区值是日期,且不同日期可以被把握到它们之间的距离,这种分区方式一般用于数据量大的时候,使用滑动式的分区,即如果某个分区的表空间满了,可以删除以前的分区,再新建一个新的分区。
Composite Partition,比较复杂,该分区把表分成多个分区组,每个分区组里面又可以根据其它列来划分,也可以直接在分区级别定义多个分区,每个分区可以由分区键指定。
举个例子,要在Oracle数据库中创建一个Composite Partition的分区表,语句如下:
CREATE TABLE part_data
(
col1 NUMBER,
col2 DATE
)
PARTITION BY RANGE (col2)
SUBPARTITION BY LIST (col1)
SUBPARTITIONS 8
(
PARTITION p0 VALUES LESS THAN (TO_DATE(‘2008-01-01’, ‘YYYY-MM-DD’)),
PARTITION p1 VALUES LESS THAN (TO_DATE(‘2009-01-01’, ‘YYYY-MM-DD’)),
PARTITION p2 VALUES LESS THAN (TO_DATE(‘2010-01-01’, ‘YYYY-MM-DD’)),
PARTITION p3 VALUES LESS THAN (TO_DATE(‘2011-01-01’, ‘YYYY-MM-DD’)),
PARTITION p4 VALUES LESS THAN (TO_DATE(‘2012-01-01’, ‘YYYY-MM-DD’)),
PARTITION p5 VALUES LESS THAN (TO_DATE(‘2013-01-01’, ‘YYYY-MM-DD’)),
PARTITION p6 VALUES LESS THAN (TO_DATE(‘2014-01-01’, ‘YYYY-MM-DD’)),
PARTITION p7 VALUES LESS THAN (TO_DATE(‘2015-01-01’, ‘YYYY-MM-DD’))
);
总之,Oracle数据库表分区是一种非常有用的功能,如果每张表都是单分区的,不仅查询效率低,而且性能也会受到限制。表的分区不仅能够分散表的数据,还可以提高表的查询性能,增加表的并行度,也有利于空间管理。