1、Oracle 分区表总结一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase)。分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。 Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直接指定分区的方法来进行查询。 When to Partition a Table什么时候需要分区表,官网的2个建议如下:(1)Tables greater than 2GB should always be co
2、nsidered for partitioning.(2)Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current months data is updatable and the other 11 months are read only.翻译:(1)表大于2GB应始终被视为分区。(2),其中包含历史数据的表,新的数据加入到最新的分区。一个典型的例子
3、是一个历史的只有当前月份的数据更新和其他11个月内是只读的表。在oracle 10g中最多支持:1024k-1个分区: Tables can be partitioned into up to 1024K-1 separate partitions翻译:表可以分成高达1024K-1单独的分区联机文档上有关分区表和索引的说明: Partitioned Tables and Indexes 分区提供以下优点: (1)由于将数据分散到各个分区中,减少了数据损坏的可能性; (2)可以对单独的分区进行备份和恢复; (3)可以将分区映射到不同的物理磁盘上,来分散IO; (4)提高可管理性、可用性和性能。
4、Oracle 10g提供了以下几种分区类型: (1)范围分区(range); (2)哈希分区(hash); (3)列表分区(list); (4)范围哈希复合分区(range-hash); (5)范围列表复合分区(range-list)。 Range分区: Range分区是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中。 如按照时间划分,2010年1月的数据放到a分区,2月的数据放到b分区,在创建的时候,需要指定基于的列,以及分区的范围值。 在按时间分区时,如果某些记录暂无法预测范围,可以创建maxvalue分区,所有不在指定范围内的记
5、录都会被存储到maxvalue所在分区中。如:create table pdba (id number, time date) partition by range (time)(partition p1 values less than (to_date(2010-10-1, yyyy-mm-dd),partition p2 values less than (to_date(2010-11-1, yyyy-mm-dd),partition p3 values less than (to_date(2010-12-1, yyyy-mm-dd),partition p4 values less
6、 than (maxvalue)Hash分区: 对于那些无法有效划分范围的表,可以使用hash分区,这样对于提高性能还是会有一定的帮助。hash分区会将表中的数据平均分配到你指定的几个分区中,列所在分区是依据分区列的hash值自动分配,因此你并不能控制也不知道哪条记录会被放到哪个分区中,hash分区也可以支持多个依赖列。 如:create table test ( transaction_id number primary key, item_id number(8) not null) partition by hash(transaction_id) ( partition part_01
7、 tablespace tablespace01, partition part_02 tablespace tablespace02, partition part_03 tablespace tablespace03 );在这里,我们指定了每个分区的表空间。List分区: List分区也需要指定列的值,其分区值必须明确指定,该分区列只能有一个,不能像range或者hash分区那样同时指定多个列做为分区依赖列,但它的单个分区对应值可以是多个。 在分区时必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入/更新就会失败,因此通常建议使用list分区时,要创建一个default分区存
8、储那些不在指定范围内的记录,类似range分区中的maxvalue分区。 在根据某字段,如城市代码分区时,可以指定default,把非分区规则的数据,全部放到这个default分区。如: create table custaddr( id varchar2(15 byte) not null, areacode varchar2(4 byte)partition by list (areacode)(partition t_list025 values (025), partition t_list372 values (372) ,partition t_list510 values (51
9、0),partition p_other values (default)组合分区: 如果某表按照某列分区之后,仍然较大,或者是一些其它的需求,还可以通过分区内再建子分区的方式将分区再分区,即组合分区的方式。 组合分区呢在10g中有两种:range-hash,range-list。注意顺序,根分区只能是range分区,子分区可以是hash分区或list分区。 如:create table test ( transaction_id number primary key, transaction_date date ) partition by range(transaction_date) s
10、ubpartition by hash(transaction_id) subpartitions 3 store in (tablespace01,tablespace02,tablespace03) ( partition part_01 values less than(to_date(2009-01-01,yyyy-mm-dd), partition part_02 values less than(to_date(2010-01-01,yyyy-mm-dd), partition part_03 values less than(maxvalue) );create table em
11、p_sub_template (deptno number, empname varchar(32), grade number) partition by range(deptno) subpartition by hash(empname) subpartition template (subpartition a tablespace ts1, subpartition b tablespace ts2, subpartition c tablespace ts3, subpartition d tablespace ts4 ) (partition p1 values less tha
12、n (1000), partition p2 values less than (2000), partition p3 values less than (maxvalue) );create table quarterly_regional_sales (deptno number, item_no varchar2(20), txn_date date, txn_amount number, state varchar2(2) tablespace ts4 partition by range (txn_date) subpartition by list (state) (partit
13、ion q1_1999 values less than (to_date(1-apr-1999,dd-mon-yyyy) (subpartition q1_1999_northwest values (or, wa), subpartition q1_1999_southwest values (az, ut, nm), subpartition q1_1999_northeast values (ny, vm, nj), subpartition q1_1999_southeast values (fl, ga), subpartition q1_1999_northcentral val
14、ues (sd, wi), subpartition q1_1999_southcentral values (ok, tx) ), partition q2_1999 values less than ( to_date(1-jul-1999,dd-mon-yyyy) (subpartition q2_1999_northwest values (or, wa), subpartition q2_1999_southwest values (az, ut, nm), subpartition q2_1999_northeast values (ny, vm, nj), subpartition q2_1999_southeast values (fl, ga), subpartition q2_1999_northcentral values (sd, wi), subpartition q2_1999_southcentral values (ok, tx) ), partition q3_1999 values less than (to_date(1-oct-1999,dd-mon-yyyy) (subpartition q3_1999_northwest values (or, wa), subpar
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1