2025年达梦数据库分区表

达梦数据库分区表目 录 1 水平分区 1 1 1 范围分区 1 1 1 1 按数字分区 1 1 1 2 按日期分区 5 1 2 列表分区 6 1 3 哈希分区 7 1 4 间隔分区 7 1 水平分区 1 1 范围分区 分区列是数字 或者日期 类型 1 1 1 按数字分区 1

大家好,我是讯享网,很高兴认识大家。

目  录

1     水平分区... 1

1.1     范围分区... 1

1.1.1 按数字分区... 1

1.1.2 按日期分区... 5

1.2     列表分区... 6

1.3     哈希分区... 7

1.4     间隔分区... 7

 

1 水平分区

1.1 范围分区

分区列是数字或者日期类型。

1.1.1 按数字分区    

1)创建分区表

SQL> create table TEST.TAB_P1(

       id int,

       name varchar(20),

       birthday date,

       birthplace varchar(30)

)

partition by range(id)

(      partition pr1 values less than(5),

       partition pr2 values less than(10)

); 

警告: 范围分区未包含MAXVALUE,可能无法定位到分区

操作已执行

已用时间: 14.897(毫秒). 执行号:52706.

SQL>

2)插入数据

使用for循环插入30条数据:

SQL> begin

       for i in 1..30 loop

              insert into TEST.TAB_P1(id,name) values(i,'NAME'||i);

              commit;

       end loop;

end;

/

[-2731]:没有找到合适的分区.

已用时间: 7.163(毫秒). 执行号:0.

查询表的行数:

SQL> select count(*) from TEST.TAB_P1;

 

行号     COUNT(*)           

---------- --------------------

1          9

 

已用时间: 0.994(毫秒). 执行号:52708.

SQL>

结果可知插入了9行数据,剩下的数据因未定义分区未能插入进去。

3)增加分区

增加分区pr3:

alter table TEST.TAB_P1 add partition pr3 values less than(maxvalue);

插入10到30的数据:

SQL> begin

       for i in 10..30 loop

              insert into TEST.TAB_P1(id,name) values(i,'NAME'||i);

              commit;

       end loop;

end;

/

SQL> select count(*) from TEST.TAB_P1;

 

行号     COUNT(*)           

---------- --------------------

1          30

 

已用时间: 0.440(毫秒). 执行号:52712.

SQL>

 

4)拆分分区

添加ID小于15的分区,将分区pr3拆分为分区pr4和pr5:

Alter table TEST.TAB_P1 split partition pr3 at(15) into (partition pr4,partition pr5);

查看表定义:

SQL> sp_tabledef('TEST','TAB_P1');

 

行号     COLUMN_VALUE                                                             

---------- --------------------------------------------------------------------------

1          CREATE TABLE "TEST"."TAB_P1"  ( 

                            "ID" INT, 

                            "NAME" VARCHAR(20), 

                            "BIRTHDAY" DATE, 

                            "BIRTHPLACE" VARCHAR(30)) 

                     PARTITION BY RANGE("ID")  ( 

                            PARTITION  "PR1"  VALUES LESS THAN(5) STORAGE(ON "MAIN", CLUSTERBTR) , 

                            PARTITION  "PR2"  VALUES LESS THAN(10) STORAGE(ON "MAIN", CLUSTERBTR) , 

                            PARTITION  "PR4"  VALUES LESS THAN(15) STORAGE(ON "MAIN", CLUSTERBTR) , 

                            PARTITION  "PR5"  VALUES LESS THAN(MAXVALUE) STORAGE(ON "MAIN", CLUSTERBTR)  

                     ) STORAGE(ON "MAIN", CLUSTERBTR) ;

 

已用时间: 0.648(毫秒). 执行号:52811.

SQL>

 

更改分区名:

SQL> alter table TEST.TAB_P1 rename partition PR4 to PR3;

SQL> alter table TEST.TAB_P1 rename partition PR5 to PR4;

 

SQL> sp_tabledef('TEST','TAB_P1');

 

行号     COLUMN_VALUE                                                             

---------- --------------------------------------------------------------------------

1          CREATE TABLE "TEST"."TAB_P1"  ( 

                            "ID" INT, 

                            "NAME" VARCHAR(20), 

                            "BIRTHDAY" DATE, 

                            "BIRTHPLACE" VARCHAR(30)) 

                     PARTITION BY RANGE("ID")  ( 

                            PARTITION  "PR1"  VALUES LESS THAN(5) STORAGE(ON "MAIN", CLUSTERBTR) , 

                            PARTITION  "PR2"  VALUES LESS THAN(10) STORAGE(ON "MAIN", CLUSTERBTR) , 

                            PARTITION  "PR3"  VALUES LESS THAN(15) STORAGE(ON "MAIN", CLUSTERBTR) , 

                            PARTITION  "PR4"  VALUES LESS THAN(MAXVALUE) STORAGE(ON "MAIN", CLUSTERBTR)  

                     ) STORAGE(ON "MAIN", CLUSTERBTR) ;

 

已用时间: 0.655(毫秒). 执行号:52814.

SQL>

5)合并分区

将分区pr3和pr4合并:

SQL> alter table TEST.TAB_P1 merge partitions pr3,pr4 into partition pr5;

修改分区名:

SQL> alter table TEST.TAB_P1 rename partition PR5 to PR3;

6)删除分区

删除分区pr3:

SQL> alter table TEST.TAB_P1 drop partition PR3;

SQL> select count(*) from TEST.TAB_P1;

 

行号     COUNT(*)           

---------- --------------------

1          9

已用时间: 0.834(毫秒). 执行号:52819.

SQL>

删除分区并删除了分区中的数据。

1.1.2 按日期分区

SQL> create table TEST.TAB_P2(

       id int,

       name varchar(20),

       birthday date,

       birthplace varchar(30)

)

partition by range(birthday)

(      partition pr1 values less than(to_date('2019-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')),

       partition pr2 values less than(to_date('2020-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')),

       partition pr3 values less than(maxvalue)

);

 

 

1.2 列表分区

分区列适合是字符串类型

SQL>   create table TEST.TAB_P2(

id int,

name varchar(20),

birthday date,

birthplace varchar(30)

)

partition by list(id)

(      partition pl1 values (‘黑龙江’,’吉林’,’辽宁’),

partition pl2 values (‘北京’,’天津’,’河北’,’山西’,’内蒙古’),

partition pl3 values (‘陕西’,’甘肃’,’新疆’,’青海’,’宁夏’)

partition pl3 values (default)

);

 

 

1.3 哈希分区

默认分区表名使用 DMHASHPART+分区号(从 0 开始)。

SQL>   create table TEST.TAB_P3(

id int,

name varchar(20),

birthday date,

birthplace varchar(30)

)

partition by hash(id) partitions 10;

 

 

1.4 间隔分区

SQL>   create table TEST.TAB_P4(

id int,

name varchar(20),

birthday date,

birthplace varchar(30)

)

partition by range(birthday)

interval(numtoyminterval(1,’YEAR’))

(      partition pi1 values less than(to_date(‘2020-01-01 00:00:00’,’YYYY-MM-DD HH24:MI:SS')),

partition pi2 values less than(to_date(‘2020-01-01 00:00:00’,’YYYY-MM-DD HH24:MI:SS')),

partition  pi2 values less than(maxvalue)

);

 

 

 

小讯
上一篇 2025-03-16 18:57
下一篇 2025-02-24 12:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/17761.html