分区表和索引(2)

分区方法概述
Oracle提供了以下的分区方法:
 RANG 分区
 LIST 分区
 HASH分区
 组合分区

图18-2提供了分区方法的一张图形化的视图。

组合分区是一种其它分区方法的组合。Oracle提供了range-hash和range-list组合分区。图18-3提供了range-hash和range-list组合分区的图形化视图。


RANGE分区
RANGE分区把数据映射到分区上,该分区是基于你为每个分区建立的分区键值的范围基础上的。这是最常用的分区类型并通常以日期的方式使用。比如,你可能想要把销售日期按月份分区。

当使用RANGE分区时,考虑以下的规则:
 每个分区都有一个VALUES LESS THAN子句,它为分区指定了一个专用的上限。等于或高于这个表达式的分区键的任何值都被加到下一个更高的分区中。
 除了第一个外的所有分区,都有一个隐式的通过上一个分区的VALUES LESS THAN子句指定的更低边界。
 MAXVALUE表达式可以被最高的分区所定义。MAXVALUE表示了一个虚拟的无限大的值,它把包括空值在内的高于分区键的其它任何可能的值归为一类。

以下片段中给出一个典型的例子,这个语句创建了一张在SALE_DATE域上进行RANGE分区的表(SALES_RANGE)。

LIST分区
列表分区能够使你显示的控制行如何映射到分区上。你可以在每个分区的描述中为每个分区键指定一个离散值列表来完成。这与值的一个范围关联一个分区的RANGE分区和一个HASH函数控制行到分区映射的HASH分区不同。LIST分区的优势在于你可以以一种自然的方式对无序和无关的成组数据进行分组和组织。

LIST分区的细节可以通过一个例子来很好的描述。在这个例子中,假如你想要通RANGE对一张SALES表进行分区。这意味着要根据它们的地理位置把地区分组在一起。如下例所示:

通过检测一行的分区列的值是否落在了分区所描述的对应那组值上来判断该行所映射的分区。比如,被插入的行如下:
■ (10, 'Jones', 'Hawaii', 100, '05-JAN-2000') maps to partition sales_west
■ (21, 'Smith', 'Florida', 150, '15-JAN-2000') maps to partition sales_East
■ (32, 'Lee’, 'Colorado', 130, '21-JAN-2000') maps to partition sales_other

不像RANGE和HASH分区那样,对于LIST分区来说多列分区键不被支持。如果一张表通过LIST分区,那分区键只能由该表的某个单独列组成。

DEFAULT分区让你通过在一个LIST分区表上使用一个默认的分区来避免指定所有可能的值。这样所有的行不会因为匹配不到分区而产生错误。
HASH分区
哈希分区能够使即不好RANGE分区或LIST分区的数据容易分区。它通过简单的语法完成并很容易的实现。当以下情况时,使用HASH 分区比RANGE分区更好:
 事先你不知道有多少数据映射到一个给定的范围
 RANGE分区的大小差异很大或难以手工保持平衡
 RANGE分区将引起数据被不适当的聚集在一起
 比如并行DML,分区剪栽,分区范围连接这些性能特征重要时

分割,删除或整合分区这些概念将不会应用到HASH分区上。相反,HASH分区可以被增加或合并。
See Also: Oracle Database Administrator's Guide for more information
about partition tasks such as splitting partitions

上面的语句创建了一张在SALESMAN_ID域上进行分区的表。表空间的名称是ts1,ts2,ts3,ts4。使用这些语法,我们确保在指定的表空间之间使用循环的方式来创建分区。
组合分区
组合分区使用RANGE的方法分区数据,并在每个分区里,使用HASH或LIST的方法进行子分区。组合RANGE-HASH分区提供了RANGE分区的改良的可管理性和HSAH分区的数据配置,加工和并行的优点。组合RANGE-LIST分区提供了RANGE分区的可管理性和LIST分区对子分区的显示控制。

组合分区支持历史操作,比如增加新的RANGE分区,并对DML操作提供了更高度的并发性和经由子分区提供了更细粒度的数据配置。

这个语句创建了在SALES_DATE域上的RAGNE分区和在SALE_ID上的HASH子分区的一张SALES_COMPOSITE表。当你使用一张模板时,ORACLE通过连接分区的名字来指定子分区,强调一下,子分区的名称来自模板。ORACLE放置这个子分区到模板指定的表空间中。在前面的语句中,SALES_JAN2000_SP1被创建和放置在表空间ts1中,而SALES_JAN2000_SP4被创建和放置在表空间ts4中。以相同的方式,SALES_APR2000_SP1被创建和放置在表空间ts1中而SALES_APR2000_SP4被创建和放置在表空间ts4中。图18-4提供了前面例子中的图性化视图。




这个语句创建了在TXN_DATE域上的RAGNE分区和在STATE上的LIST子分区的一张bimonthly_regional_sales表。当你使用一张模板时,ORACLE通过连接分区的名字来指定子分区,强调一下,子分区的名称来自模板。ORACLE放置这个子分区到模板指定的表空间中。在前面的语句中,janfeb_2000_east被创建和放置在表空间ts1中,而mayjun_2000_east被创建和放置在表空间ts1中。以相同的方式,mayjun_2000_east被创建和放置在表空间ts1中而mayjun_2000_central被创建和放置在表空间ts4中。图18-5提供了bimonthly_regional_sales表和它的9个独立的子分区的的图性化视图。


何时分区一张表
这里是何时分区一张表的一些建议:
 大于2G的表可以被考虑进行分区
 包含历史数据的表,在该表中新数据被加入到最新的分区中。一个典型的例子是一张只保存当月更新数据而其它11个月只读的历史表。

猜你喜欢

转载自refurbish.iteye.com/blog/1876057