分区表的增删合并、拆分

1 环境说明

当表中的数据量不断的增大,数据库查询数据的效率会明显变慢,应用程序的性能也会跟着下降,当表的数据足够大时,这时就应该考虑对表进行分区,或者在创建这张表时预估该表数据量很大时,在开始创建时就应该设计为分区表。分区表相比普通的大数据表有更好的查询性能,并且当其中一个分区出现问题时,不影响表的其他分区。
本文简单讲述分区表的创建,增删合并、拆分分区的基本操作。

2 分区表的常见操作

2.1 创建分区表

1)创建范围分区表

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

2)创建堆表分区表

create table t1(id int,name varchar2(10))
partition by range(id)
(partition p1 values less than (100),
partition p2 values less than (200)) storage(on MAIN,nobranch);

3)创建list分区表

create table t1 (city_id int,city_name varchar(40))
partition by list (city_name)
(partition p1 values('华中'),
partition p2 values('华东'),
partition p3 values('西南'));

4)创建哈希分区表

create table t1 (id int)
partition by hash(id) partitions 10;

2.2 插入130行数据

begin
for i in 1..130 loop
insert into t1 values(i,'a'||i);
end loop;
commit;
end;
/

2.3 查询分区情况

select table_name,PARTITION_NAME from dba_tab_partitions where table_name='t1';


查询分区的数据

select count(*) from t1 partition(p1);

2.4 增加分区

插入超出分区表范围的数据

insert into t1 values(500,'test');

报错未找到合适的分区

查询分区的最大值

alter table t1 add partition p3 values less than (600);
select table_name,high_value,partition_name from dba_tab_partitions where table_name='t1';

2.5 合并分区

select table_name,high_value,partition_name from dba_tab_partitions where table_name='t1';

alter table t1 merge partitions p2,p1 into partition p1_2;

2.6拆分分区

alter table t1 split partition p1_2 at(100) into (partition p1,partition p2);

2.7 删除分区

alter table t1 drop partition p3;

2.8 交换分区

create table test_t1 (id int,name varchar2(20));
alter table t1 exchange partition p2 with table test_t1;


验证

select count(*) from test_t1

2.9 将非分区表转化为分区表

create table tt ( id number);

begin
for i in 1..1000 loop
insert into tt values(i);
end loop;
end;
/

commit;   //如果未提交,在导出的时候是无ROWS的

导出tt表的数据

$ ./dexp sysdba/sysdba123 file=/dmdata/ttexp.dmp log=/dmdata/ttimp.log tables=tt;


删除表tt,重建名为tt的分区表

SQL> drop table tt;

SQL> create table tt (id int)
partition by range(id)
(partition p1 values less than (200),
partition p2 values less than (500),
partition p3 values less than (maxvalue));

导入数据

$ ./dimp sysdba/sysdba123 file=/dmdata/ttexp.dmp log=/dmdata/tt_imp.log ignore=y;

验证数据

更多资讯请上达梦技术社区了解:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值