暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

知识点 | Oracle创建分区表(Partition Table)

原创 杨磊 2021-05-04
3289

分区(Partition)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增强。

在10g的Oracle版本中,要对分区表做调整,尤其是对RANGE分区添加新的分区都需要DBA手动定期添加,或都使用存储过程进行管理。

在11G的版本中的Interval Partition不再需要DBA去干预新分区的添加,Oracle会自动去执行这样的操作,减少了DBA的工作量。Interval Partition是Range分区的一个扩展。

使用Interval Partition也有一些限制:

  1. You can only specify one partitioning key column, and it must be of NUMBER or DATE type.
  2. Interval partitioning is not supported for index-organized tables.
  3. You cannot create a domain index on an interval-partitioned table.

Interval Partition也可以创建复合分区:

1. Interval-range
2. Interval-hash
3. Interval-list

复制

以下是创建Interval分区表示例:

sys@ORCL> CREATE  TABLE  interval_sales
( prod_id        NUMBER(6)
, cust_id        NUMBER
, time_id         DATE
, channel_id      CHAR (1)
, promo_id       NUMBER(6)
, quantity_sold  NUMBER(3)
, amount_sold    NUMBER(10,2)
) 
PARTITION  BY  RANGE (time_id) 
INTERVAL(NUMTOYMINTERVAL(1,  'MONTH' ))
( PARTITION p0  VALUES  LESS THAN (TO_DATE( '1-1-2018' ,  'DD-MM-YYYY' )),
PARTITION p1  VALUES  LESS THAN (TO_DATE( '1-1-2019' ,  'DD-MM-YYYY' )),
PARTITION p2  VALUES  LESS THAN (TO_DATE( '1-7-2019' ,  'DD-MM-YYYY' )),
PARTITION p3  VALUES  LESS THAN (TO_DATE( '1-1-2020' ,  'DD-MM-YYYY' )) );

复制

Table created.

以下为常用的四种分区表类别:

1.1、范围分区表;
1.2、列表分区表;
1.3、哈希分区表;
1.4、组合分区表;

复制

1.1 范围分区表

CREATE TABLE range_Partition_Table(
     range_key_column DATE,
     NAME VARCHAR2(20),
     ID integer
 ) PARTITION BY RANGE(range_key_column) tablespace tbs_a
 (
     PARTITION PART_202007 VALUES LESS THAN (TO_DATE('2020-07-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs01,
     PARTITION PART_202008 VALUES LESS THAN (TO_DATE('2020-08-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs02,
     PARTITION PART_202009 VALUES LESS THAN (TO_DATE('2020-09-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs03
);

复制

1.2、列表分区表

CREATE TABLE list_Partition_Table(
     NAME VARCHAR2(10),
     DATA VARCHAR2(20)
)PARTITION BY LIST(NAME) tablespace tbs_a
(
      PARTITION PART_01 VALUES('ME','PE','QC','RD'),
      PARTITION PART_02 VALUES('SMT','SALE')
);

复制

1.3 哈希分区表

CREATE TABLE hash_Partition_Table(
      hash_key_column VARCHAR2(30),
      DATA VARCHAR2(20)
) PARTITION BY HASH(hash_key_cloumn) tablespace tbs_name
(
     PARTITION PART_0001,
     PARTITION PART_0002,
     PARTITION PART_0003,
     PARTITION PART_0004,
     PARTITION PART_0005
);

复制

1.4 组合分区表

CREATE TABLE range_hash_Partition_Table(
 range_column_key DATE,
 hash_column_key INT,
 DATA VARCHAR2(20)
)
PARTITION BY RANGE(range_column_key) tablespace tbs_name
SUBPARTITION BY HASH(hash_column_key) SUBPARTITIONS 2
(
   PARTITION PART_202008 VALUES LESS THAN (TO_DATE('2020-08-01','yyyy-mm-dd'))(
      SUBPARTITION SUB_1,
      SUBPARTITION SUB_2,
      SUBPARTITION SUB_3
   ),
   PARTITION 202009 VALUES LESS THAN (TO_DATE('2020-09-01','yyyy-mm-dd'))(
      SUBPARTITION SUB_1,
      SUBPARTITION SUB_2
   )

复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论