单级分区 使用范围、哈希、列表三种分区策略的任何一中,在表的一个或多个列上建立分区。
1.范围分区策略-策略说明 依据分区键值的范围不同进行分区,当数据在范围内均衡分布时,性能最好,是最常见的分区策略,一般与日期相关。该策略的每个分区均具有一个VALUES LESS THAN子句,用来指定该分区包含的范围数据的上限。任何分区键的值大于等于该值时被添加到下一个更高的分区。 所有分区,除了第一个,有一个隐含的下限为前一个分区的VALUES LESS THAN值。此外,包含一个MAXVALUE用来义为最高的分区。 MAXVALUE代表一个虚拟的无限大的值,包括NULL值。 1.范围分区策略—语法
1.范围分区策略—语法注意事项 如果基于多个列创建分区,列之间用逗号分隔;值部分也是用逗号分隔,且该值必须与列的类型相同。值部分也可以使用函数,如TO_DATE等。还要注意LESS THAN相当于小于号(<),如: partition by range(ND,YD ) ( partition ACCOUNT_TRADE_SR_P201001 values less than(2010,'02'), partition ACCOUNT_TRADE_SR_P201002 values less than(2010,'03'), partition ACCOUNT_TRADE_SR_P201003 values less than(2010,'04'), partition ACCOUNT_TRADE_SR_P201004 values less than(2010,'05'), partition ACCOUNT_TRADE_SR_P201005 values less than(2010,'06'), partition ACCOUNT_TRADE_SR_P201006 values less than(2010,'07'), partition ACCOUNT_TRADE_SR_P201007 values less than(2010,'08'), partition ACCOUNT_TRADE_SR_P201008 values less than(2010,'09'), partition ACCOUNT_TRADE_SR_P201009 values less than(2010,'10'), partition ACCOUNT_TRADE_SR_P201010 values less than(2010,'11'), partition ACCOUNT_TRADE_SR_P201011 values less than(2010,'12'), partition ACCOUNT_TRADE_SR_P201012 values less than(2011,'01'), partition ACCOUNT_TRADE_SR_PMORE values less than(MAXVALUE,MAXVALUE)); 1.范围分区策略—示例体验 l 创建一个结构类似表ACCOUNT_TRADE的单级范围分区表ACCOUNT_TRADE_SR l从表ACCOUNT_TRADE读取2010年的数据写入表ACCOUNT_TRADE_SR l分析表ACCOUNT_TRADE_SR l查看分区数据并将两个表的数据进行对比 参见附件脚本3

1.范围分区策略—示例体验
2.散列分区策略-策略说明 依据Oracle的散列分区算法将数据映射到分区上,该算法不可人工改变。散列分区会尽量将数据均匀的分布在不同的分区上。当业务数据中没有历史数据时,选择散列分区是一个比较好的替代方法。这个分区方法能够保持I/O平衡,但是不可用于范围查询或不等式查询。 注意:Oracle推荐Hash分区的分区数是2的幂,如2、4、8、16等。 2.散列分区策略-语法
2.散列分区策略-语法注意事项 单独散列分区(individual_hash_partitions)及其限制使用子名按照名字指定单个分区,分区名可以匆略。此时能指定的唯一子句是表空间。按照数量的散列分区(hash_partitions_by_quantity)可以指定分区的数目,Oracle此时指定分区的名字SYS_Pn。STORE IN子句指定分区所分布的表空间的名称。表空间的数目不一定和分区的数目相等。如果分区的数目比表空间的数目大,则分区按照名称循环使用表空间。如果在按数量分区时指了STORE IN和分区存储子句的表空间,则SOTRE IN指定了表创建分区的位置,TABLESPACE子句指定随后操作的缺省表空间。此时语句partitions后面只能跟数字,一般为2的幂,否则会引起ORA-14152错误。 2.散列分区策略—按照数量分区示例体验 表为ACCOUNT_TRADE_SHQ,方法同前面,分区语句如下: partition by hash ( JYSJ ) partitions 4 store in ( TS_ORALEARN, TS_ORALEARN_IDX ); 参见附件脚本4
2.散列分区策略—单独散列分区示例体验 表为ACCOUNT_TRADE_SHI,方法同前面,分区语句如下: partition by hash( JYSJ )( partition ACCOUNT_TRADE_SHI_P1 tablespace TS_ORALEARN, partition ACCOUNT_TRADE_SHI_P2 tablespace TS_ORALEARN_IDX, partition ACCOUNT_TRADE_SHI_P3 tablespace TS_ORALEARN, partition ACCOUNT_TRADE_SHI_P4 tablespace TS_ORALEARN ); 参见附件脚本5
3.列表分区策略-策略说明 列表分区通过为分区键指定一系列离散的值(即枚举值)来明确的控制行数据的存储分区,其优点是可以将一些无序和不相关的数据组织在一起。如,银行
系统的数据可以按区域分区。每个分区的list_values_clause(参见语法说明部分)最少有一个值。空值可能在多个分区中出现。你可以指定一个缺省分区,且缺省分区是定义分区的最后一个。 list_values_clause的每个值在表的所有分区必须唯一。 3.列表分区策略-语法
3.列表分区策略—示例体验 表为ACCOUNT_TRADE_SL,方法同前面,分区语句如下: partition by list ( ND ) ( partition ACCOUNT_TRADE_SL_P2010 values ( 2010 ) tablespace TS_ORALEARN, partition ACCOUNT_TRADE_SL_P2011 values ( 2011 ) tablespace TS_ORALEARN, partition ACCOUNT_TRADE_SL_PD values ( DEFAULT ) tablespace TS_ORALEARN_IDX ); 参见附件脚本6