oracle 分区表-范围分区(Range-Partitioned Tables)

oracle数据库的分区表大致分为四种:范围分区表、hash分区表、列表分区表、复合分区表。

什么时候适合使用分区表呢:官方给的建议是当表大于2GB 或表中包含不必要的历史数据时。

分区表的优点是:1、由于数据是分别存储在不同的分区中,减少数据损坏的可能性;2、可以把分区映射到不同的磁盘上,减少I/O压力;3、可以单独对分区进行备份和恢复,提供管理性和可用性。

为了测试分区表,我们首先创建4个小的表空间

点击(此处)折叠或打开

  1. create tablespace sale01 datafile '/oracle/database/oradata/indsdb/sale01.dbf' size 5m autoextend next 5m maxsize 2g;
  2. create tablespace sale02 datafile '/oracle/database/oradata/indsdb/sale02.dbf' size 5m autoextend next 5m maxsize 2g;
  3. create tablespace sale03 datafile '/oracle/database/oradata/indsdb/sale03.dbf' size 5m autoextend next 5m maxsize 2g;
  4. create tablespace sale04 datafile '/oracle/database/oradata/indsdb/sale04.dbf' size 5m autoextend next 5m maxsize 2g
首先,我们创建范围分区表,顾名思义,范围分区就是根据表的列值的大小进行分区,值的大小决定了数据存储在哪个分区上
接下来,我们创建范围分别表, 它跟非分区表的创建语句基本一下,就是需要在指定好表的列后,增加根据某列的大小设置保存的分区和使用的表空间,使用关键字range by,这里我们对create_time时间类型的字段进行分区
点击( 此处 )折叠或打开
  1. create table RECORD_partition
  2. (
  3.   ID CHAR(32) primary key,
  4.   ENTERPRISE_ID VARCHAR2(32) not null,
  5.   OPERATOR_ID CHAR(32),
  6.   TEMPLATE_ID CHAR(32),
  7.   WORK_CODE CHAR(10),
  8.   NAME VARCHAR2(300) not null,
  9.   CREATE_TIME DATE,
  10.   ACTUAL_LONGITUDE NUMBER(9,6),
  11.   ACTUAL_LATITUDE NUMBER(8,6),
  12.   ACTUAL_LOCDESC VARCHAR2(500),
  13.   CONTENT VARCHAR2(1000),
  14.   DELETE_STATE NUMBER(1),
  15.   PROVINCE_NAME VARCHAR2(128) default '--',
  16.   CITY_NAME VARCHAR2(128) default '--',
  17.   COUNTY_NAME VARCHAR2(128) default '--',
  18.   PIC_NUM NUMBER default 0 not null
  19.   )
  20.   partition by range(CREATE_TIME)
  21. (
  22. partition part01_2013 values less than (to_date('2014-01-01','yyyy-mm-dd')) tablespace sale01,
  23. partition part02_2014 values less than (to_date('2015-01-01','yyyy-mm-dd')) tablespace sale02,
  24. partition part03_2015 values less than (to_date('2016-01-01','yyyy-mm-dd')) tablespace sale03,
  25. partition part04_2016 values less than (maxvalue) tablespace sale04
  26. )
接下来,创建一个本地索引local ,本地索引与全局索引的区别在于全局索引在创建global子句时可以指定索引的范围值

点击(此处)折叠或打开

  1. create index record_partition_idx on record_partition(OPERATOR_ID)
  2. local
  3. (
  4. partition idx_part01_2013 tablespace sale01,
  5. partition idx_part02_2014 tablespace sale02,
  6. partition idx_part03_2015 tablespace sale03,
  7. partition idx_part04_2016 tablespace sale04
  8. )
最后就是需要插入数据验证了,我们这里先杀入200行看看效果,

点击(此处)折叠或打开

  1. SQL> select table_name,partition_name,tablespace_name from user_tab_partitions where table_name = upper('record_partition');
     
    TABLE_NAME                     PARTITION_NAME                 TABLESPACE_NAME
    ------------------------------ ------------------------------ ------------------------------
    RECORD_PARTITION               PART01_2013                    SALE01
    RECORD_PARTITION               PART02_2014                    SALE02
    RECORD_PARTITION               PART03_2015                    SALE03
    RECORD_PARTITION               PART04_2016                    SALE04

  2. SQL> insert into record_partition select * from record where rownum<=200 ;
  3.  
  4. 200 rows inserted
  5.  
  6. SQL> select count(*) from record_partition partition(part04_2016);
  7.  
  8.   COUNT(*)
  9. ----------
  10.         13
  11.  
  12. SQL> select count(*) from record_partition partition(part03_2015);
  13.  
  14.   COUNT(*)
  15. ----------
  16.          0
  17.  
  18. SQL> select count(*) from record_partition partition(part02_2014);
  19.  
  20.   COUNT(*)
  21. ----------
  22.          0
  23.  
  24. SQL> select count(*) from record_partition partition(part01_2013);
  25.  
  26.   COUNT(*)
  27. ----------
  28.        187
  29.  
  30. SQL> select count(*) from record_partition ;
  31.  
  32.   COUNT(*)
  33. ----------
  34.        200
  35.  
  36. SQL>
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27039319/viewspace-2121065/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27039319/viewspace-2121065/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值