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