SQL表分区(创建分区表)

5、表分区(创建分区表)

1、范围分区

【例】按入职日期进行范围分区

CREATE TABLE 表名 (列名 数据类型 [,列名 数据类型]...)

PARTITION  BY  RANGE (HIREDATE)

(

      PARTITION  part1 VALUES  LESS  THAN (TO_DATE('1981-1-1','YYYY/MM/DD')) TABLESPACE CUS_TS01, --

      PARTITION  part2 VALUES  LESS  THAN (TO_DATE('1982-1-1','YYYY/MM/DD')) TABLESPACE CUS_TS02,

      PARTITION  part3 VALUES  LESS  THAN (TO_DATE('1983-1-1','YYYY/MM/DD')) TABLESPACE CUS_TS03,

      PARTITION  part4 VALUES  LESS  THAN (TO_DATE('1988-1-1','YYYY/MM/DD')) TABLESPACE CUS_TS04,

      PARTITION  part5 VALUES  LESS  THAN (MAXVALUE) TABLESPACE CUS_TS05

)

 

2.列表分区:

【例】按DEPTNO进行LIST分区

CREATE TABLE 表名 (列名 数据类型 [,列名 数据类型]...)

PARTITION BY LIST (DEPTNO)

(

      PARTITION MYEMP_DEPTNO_10  VALUES (10),

      PARTITION MYEMP_DEPTNO_20  VALUES (20) ,

      PARTITION MYEMP_DEPTNO_30  VALUES (30) ,

      PARTITION MYEMP_DEPTNO_40  VALUES (40)

     )

 

3.散列分区:

CREATE TABLE 表名 (列名 数据类型 [,列名 数据类型]...)

PARTITION BY HASH (COL)

(

  PARTITION PART01 TABLESPACE HASH_TS01,

  PARTITION PART02 TABLESPACE HASH_TS02,

  PARTITION PART03 TABLESPACE HASH_TS03

)

简写:

CREATE TABLE 表名 (列名 数据类型 [,列名 数据类型]...)

PARTITION BY  HASH (empno) PARTITIONS 8

STORE IN (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);

 

4.组合分区(组合范围散列分区)

基于 范围分区 列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区

【例】按入职日期进行范围分区,再按DEPTNO进行LIST子分区

CREATE TABLE 表名 (列名 数据类型 [,列名 数据类型]...)

PARTITION BY RANGE(HIREDATE) SUBPARTITION BY LIST (DEPTNO)

(

   PARTITION P1 VALUES LESS THAN(TO_DATE('1981-01-01','YYYY-MM-DD'))

          (

              SUBPARTITION P1A VALUES (10) ,

              SUBPARTITION P1B VALUES (20),

              SUBPARTITION P1C VALUES (30),

              SUBPARTITION P1D VALUES (40)

          ),

   PARTITION P2 VALUES LESS THAN (TO_DATE('1982-01-01','YYYY-MM-DD'))

          (

              SUBPARTITION P2A VALUES (10) ,

              SUBPARTITION P2B VALUES (20),

              SUBPARTITION P2C VALUES (30),

              SUBPARTITION P2D VALUES (40)

          ),

   PARTITION P3 VALUES LESS THAN (TO_DATE('1983-01-01','YYYY-MM-DD'))

          (

             SUBPARTITION P3A VALUES (10) ,

              SUBPARTITION P3B VALUES (20),

              SUBPARTITION P3C VALUES (30),

              SUBPARTITION P3D VALUES (40)

          ),

     PARTITION P4 VALUES LESS THAN (TO_DATE('1988-01-01','YYYY-MM-DD'))

          (

             SUBPARTITION P4A VALUES (10) ,

              SUBPARTITION P4B VALUES (20),

              SUBPARTITION P4C VALUES (30),

              SUBPARTITION P4D VALUES (40)

          )

)

5.复合分区(复合范围散列分区)

基于 范围分区 散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区

CREATE TABLE 表名 (列名 数据类型 [,列名 数据类型]...)

 partition by range(transaction_date) subpartition by hash(transaction_id)

 subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)

 (

     partition part_01 values less than(to_date(2006-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)

 );

 

1)添加分区

以下代码给表添加了一个P3分区

ALTER TABLE 表名 ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));  

注意:以上添加的分区界限应该高于最后一个分区界限。

 

以下代码给表的P3分区添加了一个P3SUB1子分区

ALTER TABLE 表名 MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');

 

2)删除分区

以下代码删除了P3表分区:

ALTER TABLE 表名 DROP PARTITION P3;

 

在以下代码删除了P4SUB1子分区:

ALTER TABLE 表名 DROP SUBPARTITION P4SUB1;

注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。

 

3)截断分区

截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。

当表中即使只有一个分区时,也可以截断该分区。

通过以下代码截断分区:

ALTER TABLE 表名 TRUNCATE PARTITION P2;

 

通过以下代码截断子分区:

ALTER TABLE 表名 TRUNCATE SUBPARTITION P2SUB2;

 

4)合并分区

合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,

注意的是,不能将分区合并到界限较低的分区。

以下代码实现了P1 P2分区的合并:

ALTER TABLE 表名 MERGE PARTITIONS P1,P2 INTO PARTITION P2;

 

5)拆分分区

拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。

ALTER TABLE 表名 SBLIT PARTITION 分区名 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);

 

6)接合分区(coalesca)

结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,

注意的是,接合分区只能用于散列分区中。

通过以下代码进行接合分区:

ALTER TABLE 表名 COALESCA PARTITION;

 

7)重命名表分区

以下代码将P21更改为P2

ALTER TABLE 表名 RENAME PARTITION P21 TO P2; 

posted @ 2022-05-07 00:50  潜摩羯  阅读(3016)  评论(0编辑  收藏  举报