欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

达梦数据库关于范围分区表及一些说明

程序员文章站 2022-06-03 07:49:43
...

达梦数据库分区表实际上是把一张大表,逻辑上拆分成多个小表。分散IO,方便管理

范围分区:分区列一般用数字或日期类型

1、解决分区表超出范围问题

----创建范围分区表
Create TABLE a_r1(id int,name varchar(20))
partition by RANGE(id)
(partition p1 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (200)
);

达梦数据库关于范围分区表及一些说明

----插入一些数据
begin
	FOR i in 1..160 LOOP
	insert into A_R1 VALUES (i,'ab'||i);
	commit;
	end LOOP;
end;

----查询a_r1和p1、p2
select count(*) from a_r1;
select count(*) from a_r1 PARTITION (p1);
select count(*) from a_r1 PARTITION (p2);
----插入一条不在该分区数据
insert into a_r1 values (230,'aaa');

达梦数据库关于范围分区表及一些说明
解决办法

----查询分区表最大分区数
select  table_name,high_value,partition_name  from dba_tab_partitions where table_name='A_R1';

----增加分区
alter table a_r1 add partition pn values less than (maxvalue);

2、局部唯一索引必须包含全部分区列

创建分区表如果表中有主键列,分区列必须包含主键。

create table t_r2 (sid int primary key,id int,name varchar(20))
partition by range (id)
(partition p1 values less than (100),
partition p2 values less than (200));

达梦数据库关于范围分区表及一些说明
分区表中没有主键列或唯一索引列,则可以创建。

create table t_r3 (sid int,id int,name varchar(20))
partition by range (id)
(partition p1 values less than (100),
partition p2 values less than (200));

达梦数据库关于范围分区表及一些说明
另外堆表也是可以即便有主键列或唯一索引列也可以创建

----更改默认创建的表为堆表(一般不建议使用堆表)
sp_set_para_value(1,'LIST_TABLE',1);
----查询LIST_TABLE参数
select para_name,para_value,para_type from v$dm_ini t where t.para_name='LIST_TABLE';
----创建分区表
create table t_r2 (sid int primary key,id int,name varchar(20))
partition by range (id)
(partition p1 values less than (100),
partition p2 values less than (200));

达梦数据库关于范围分区表及一些说明

3、水平分区堆表各子表必须位于同一个表空间

水平分区堆表必须在一个表空间中

create table t_r6 (sid int ,id int,name varchar(20),constraint t6_pri
primary key (sid))
partition by range (sid)
(partition p1 values less than (100) tablespace MAIN,
partition p2 values less than (200) tablespace tbs) storage (nobranch);

达梦数据库关于范围分区表及一些说明
错误[-2757]:
水平分区堆表各子表必须位于同一个表空间

没有堆表的情况,分区表可以在不同表空间

create table t_r5 (sid int ,id int,name varchar(20),constraint t5_pri
primary key (sid))
partition by range (sid)
(partition p1 values less than (100) tablespace tbs,
partition p2 values less than (200) tablespace main);

达梦数据库关于范围分区表及一些说明

4、分区表的管理

----创建分区表
create table t_r5 (sid int ,id int,name varchar(20),constraint t5_pri
primary key (sid))
partition by range (sid)
(partition p1 values less than (100) tablespace tbs1,
partition p2 values less than (200) tablespace tbs2);
----增加分区:
alter table t_r5 add partition p3 values less than (300);
----删除分区:
alter table t_r5 drop partition p3;
----合并分区:
alter table t_r5 merge partitions p2,p3 into partition p2_3;
----拆分分区:
alter table t_r5 split partition p2_3 at (200) into
(partition p2,partition p3);
----交换分区:(把第一个分区的数据交换出来)
create table test (sid int primary key,id int,name varchar(20));
alter table t_r5 exchange partition p1 with table test;
select * from t_r5 partition(p1);
相关标签: 达梦数据库