达梦数据库关于范围分区表及一些说明
程序员文章站
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);
上一篇: 多听一些甜蜜的话
下一篇: Django:locals()小技巧