Oracle学习之分区表的管理(四种分区)

一、范围分区

范围分区是按照分区列值的范围来对表进行分区的。

通过PARTITION BY RANGE子句说明根据范围进行分区,其后括号中列出分区列。

每个分区以PARTITION关键字开头,其后是分区名。VALUES LESS THAN子句用于设置分区中分区列值的范围。

---创建一个分区表,将学生信息根据其出生日期进行分区---
CREATE TABLE student_range(
    sno NUMBER(6) PRIMARY KEY,  sname   
    VARCHAR2(10),    sage int,   birthday DATE
)
 PARTITION BY RANGE(birthday)
 ( PARTITION p1 VALUES LESS THAN
       (TO_DATE('XXXX-X-X', 'YYYY-MM-DD'))  
         TABLESPACE TBS1,
   PARTITION p2 VALUES LESS THAN
        (TO_DATE('XXXX-X-X', 'YYYY-MM-DD'))  
        TABLESPACE TBS2,
    PARTITION p3 VALUES LESS THAN(MAXVALUE)
        TABLESPACE TBS3 STORAGE(INITIAL 
           10M NEXT 20M))
      STORAGE(INITIAL 20M NEXT 10M MAXEXTENTS 10
);

二、列表分区

如果分区列的值并不能划分范围(非数值类型或日期类型),同时分区列的取值范围只是一个包含少数值的集合,则可以对表进行列表分区(LIST),如按地区、性别等分区。

通过PARTITION BY LIST子句说明根据列表进行分区,其后括号中列出分区列。

每个分区以PARTITION 关键字开头,其后是分区名。VALUES子句用于设置分区所对应的分区列取值。

创建一个分区表,将学生信息按性别不同进行分区,男学生信息保存在表空间TBS1中,而女学生信息保存在TBS2中。 
CREATE TABLE student_list(
    sno NUMBER(6) PRIMARY KEY,
    sname VARCHAR2(10),
    sex   CHAR(2) CHECK(sex in ('M', 'F'))
)
PARTITION BY LIST(sex)
(PARTITION student_male VALUES('M') TABLESPACE TBS1,
   PARTITION student_female VALUES('F') TABLESPACE TBS2
);

三、散列分区

散列分区(HASH)是在指定数量的分区中均等地分配数据。为了创建散列分区,需要指定分区列、分区数量或单独的分区描述。

通过PARTITION BY HASH指定分区方法,其后的括号指定分区列。使用PARTITION子句指定每个分区名称和其存储空间。或者使用PARTITIONS子句指定分区数量,用STORE IN子句指定分区存储空间。

创建一个分区表,根据学号将学生信息均匀分布到TBS1和TBS2两个表空间中。

①使用PARTITION子句指定每个分区名称和其存储空间
CREATE TABLE student_hash (
     sno NUMBER(6) PRIMARY KEY,
     sname VARCHAR2(10)
)
PARTITION BY HASH(sno)
(PARTITION p1 TABLESPACE TBS1,
 PARTITION p2 TABLESPACE TBS2
); 

②使用PARTITIONS子句指定分区数量,用STORE IN子句指定分区存储空间
CREATE TABLE student_hash2 (
     sno NUMBER(6) PRIMARY KEY,
     sname VARCHAR2(10) )
PARTITION BY HASH(sno)
PARTITIONS 2 STORE IN(TBS1,TBS2); 

四、复合分区

复合分区包括:①范围-列表复合分区  ②范围-散列复合分区。

创建复合分区时需要指定:

      分区方法(PARTITION BY RANGE)

      分区列

      子分区方法(SUBPARTITION BY HASH,SUBPARTITION BY LIST)

      子分区列

      每个分区中子分区数量或子分区的描述。

 

①范围-列表复合分区

  范围-列表复合分区先对表进行范围分区,然后再对每个分区进行列表分区,即在一个范围分区中创建多个列表子分区。

CREATE TABLE student_range_list(
 sno NUMBER(6) PRIMARY KEY,
 sname VARCHAR2(10), sex   CHAR(2) CHECK(sex IN ('M','F')),
 sage  NUMBER(4), birthday DATE
)
 PARTITION BY RANGE(birthday)
 SUBPARTITION BY LIST(sex)
 (PARTITION p1 VALUES LESS THAN(TO_DATE('XXXX-X-X', 'YYYY-MM-DD'))
         (SUBPARTITION p1_sub1 VALUES('M') TABLESPACE TBS1,
          SUBPARTITION p1_sub2 VALUES('F') TABLESPACE TBS2),
 PARTITION p2 VALUES LESS THAN(TO_DATE('XXXX-X-X', 'YYYY-MM-DD'))
         (SUBPARTITION p2_sub1 VALUES('M') TABLESPACE TBS3,
          SUBPARTITION p2_sub2 VALUES('F') TABLESPACE TBS4),
 PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE TBS5
); 

②范围-散列复合分区

  范围-散列复合分区先对表进行范围分区,然后再对每个分区进行散列分区,即在一个范围分区中创建多个散列子分区。

CREATE TABLE student_range_hash(
 	sno NUMBER(6) PRIMARY KEY,
 	sname VARCHAR2(10),
 	sage  NUMBER(4),
 	birthday DATE
 	)
 	PARTITION BY RANGE(birthday)
 	SUBPARTITION BY HASH(sage)
 	(PARTITION p1 VALUES LESS THAN(TO_DATE('XXXX-X-X', 'YYYY-MM-DD'))
                    (SUBPARTITION p1_sub1 TABLESPACE TBS1,
                      SUBPARTITION p1_sub2 TABLESPACE TBS2),    	
     PARTITION p2 VALUES LESS THAN(TO_DATE('XXXX-X-X', 'YYYY-MM-DD'))
                     (SUBPARTITION p2_sub1 TABLESPACE TBS3,
                      SUBPARTITION p2_sub2 TABLESPACE TBS4),
     PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE TBS5
 	);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值