Oracle数据库表分区

  • 什么是分区?

    把大数据对象 (表, 索引)被分成小物理段,当分区表建立时,记录基于分区字段值被存储到相应分区。当分区表建立时,记录基于分区字段值被存储到相应分区,分区字段值可以修改,可以存储在不同的表空间,可以有不同的物理存储参数,支持IOT表,对象表,LOB字段,varrays等。


    095456_MjQs_876257.png


  • 分区的好处?

    查询只是查询指定分区,数据更少,速度快,好维护。

  • 如何实施分区?

  oracle分区分为四种:1.范围分区(Range partitioning);2.hash分区(Hash partitioning);3.列表分区  (List partitioning);4.组合分区(Composite partitioning)

  1)范围分区(Range partitioning)

CREATE TABLE sales 
  (acct_no      NUMBER(5),
  person       VARCHAR2(30),
 sales_amount NUMBER(8),
   week_no      NUMBER(2)) 
  PARTITION BY RANGE (week_no)  
  (PARTITION P1 VALUES LESS THAN (4) TABLESPACE data0,
     PARTITION P2 VALUES LESS THAN (8) TABLESPACE data1,
          ...…     
    PARTITION P13 VALUES LESS THAN (53)TABLESPACE data12

Range分区是最早、最经典的分区算法,Range分区通过对分区字段值的范围进行分区,特别适合于按时间周期进行数据的存储。日、周、月、年等。缺点是范围分区的数据可能不均匀,范围分区与记录值相关,实施难度和可维护性相对较差。

2)hash分区(Hash partitioning)

create table CUSTOMERS (... column definitions ...)
pctfree 0 nologging
storage ( initial 40m next 40m pctincrease 0 )
partition by hash(customer_no) partitions 8 store in (cust_data01,cust_data02)

create table CUSTOMERS (... column definitions ...)
pctfree 0 nologging
storage ( initial 40m next 40m pctincrease 0 )
partition by hash(customer_no) 
(partition cust_p01 tablespace cust_data01
,partition cust_p02 tablespace cust_data02
,partition cust_p03 tablespace cust_data03
,partition cust_p04 tablespace cust_data04
,partition cust_p05 tablespace cust_data05
,partition cust_p06 tablespace cust_data06
,partition cust_p07 tablespace cust_data07
,partition cust_p08 tablespace cust_data08)

基于分区字段的HASH值,自动将记录插入到指定分区。分区数一般是2的幂,易于实施,总体性能最佳,适合于静态数据。HASH分区适合于数据的均匀存储,HASH分区特别适合于PDML和partition-wise joins。支持 (hash) local indexes,9i 不支持 (hash) global indexes,10g 支持(hash) global indexes HASH分区。缺点是数据管理能力弱,HASH分区对数据值无法控制。

3)列表分区  (List partitioning)

create table addresses (... column definitions ...)
pctfree 0 nologging
storage ( initial 40m next 40m pctincrease 0 )
partition by list(city_name) 
(partition addr_p01 values ('WELLINGTON') tablespace addr_data01
,partition addr_p02 values ('CHRISTCHURCH') tablespace addr_data02
,partition addr_p03 values ('DUNEDIN','INVERCARGILL') tablespace addr_data03
,partition addr_p04 values ('AUCKLAND') tablespace addr_data04
,partition addr_p05 values ('HAMILTON','ROTORUA','TAURANGA') tablespace addr_data05)

ist分区通过对分区字段的离散值进行分区。List分区是不排序的,而且分区之间没有关联关系,List分区适合于对数据离散值进行控制。List分区只支持单个字段。List分区具有与范围分区相似的优缺点,数据管理能力强。List分区的数据可能不均匀,List分区与记录值相关,实施难度和可维护性相对较差

3)列表分区  (List partitioning)

create table addresses (... column definitions ...)
pctfree 0 nologging
storage ( initial 40m next 40m pctincrease 0 )
partition by list(city_name) 
(partition addr_p01 values ('WELLINGTON') tablespace addr_data01
,partition addr_p02 values ('CHRISTCHURCH') tablespace addr_data02
,partition addr_p03 values ('DUNEDIN','INVERCARGILL') tablespace addr_data03
,partition addr_p04 values ('AUCKLAND') tablespace addr_data04
,partition addr_p05 values ('HAMILTON','ROTORUA','TAURANGA') tablespace addr_data05)

ist分区通过对分区字段的离散值进行分区。List分区是不排序的,而且分区之间没有关联关系,List分区适合于对数据离散值进行控制。List分区只支持单个字段。List分区具有与范围分区相似的优缺点,数据管理能力强。List分区的数据可能不均匀,List分区与记录值相关,实施难度和可维护性相对较差。

4)组合分区(Composite partitioning)

create table daily_trans_data (...column definitions ...)
partition by range(trans_datetime)
subpartition by hash(customer_no) subpartitions 8 store in (dtd_data01,dtd_data02)
   (partition dtd_20010620 values less than (to_date('21-jun-2001','dd-mon-yyyy'))
       (subpartition dtd_20010620_s01
       ,subpartition dtd_20010620_s02
       ,subpartition dtd_20010620_s03 tablespace dtd_data03
       ,subpartition dtd_20010620_s04 tablespace dtd_data04
       ,subpartition dtd_20010620_s05 tablespace dtd_data05
       ,subpartition dtd_20010620_s06 tablespace dtd_data06
       ,subpartition dtd_20010620_s07 tablespace dtd_data07
       ,subpartition dtd_20010620_s08 tablespace dtd_data08
       )
   ,partition dtd_20010621 values less than (to_date('22-jun-2001','dd-mon-yyyy'))
   ,partition dtd_20010622 values less than (to_date('23-jun-2001','dd-mon-yyyy')) subpartitions 4
   )

Oracle支持的Composite分区: Range-Hash,Range-List,既适合于历史数据,又适合于数据均匀分布,与范围分区一样提供高可用性和管理性。有更好的PDML和partition-wise joins性能,实现粒度更细的操作,支持复合 local indexes,不支持复合composite global indexes。


转载于:https://my.oschina.net/jianxiao/blog/277513

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值