
在大型的企业应用或企业级的数据库应用中,要处理的数据量通常达到TB级,对于这样的大型表执行全表扫描或者DML操作时,效率是非常低的。
为了提高数据库在大数据量读写操作和查询时的效率,达梦数据库提供了对表和索引进行分区的技术,把表和索引等数据库对象中的数据分割成小的单位,分别存放在一个个单独的段中,用户对表的访问转化为对较小段的访问,以改善大型应用系统的性能。
达梦数据库分区表主要包括范围分区、哈希分区和列表分区三种方式, 企业可以使用合适的分区方法,如日期(范围)、区域(列表),对大量数据进行分区。由于达梦数据库划分的分区是相互独立且可以存储于不同的存储介质上的,完全可满足企业高可用性、 均衡IO、降低维护成本、提高查询性能的要求。今天我们主要讨论水平分区。
1.创建范围分区表
create table r_t1 (pid int primary key ,id int)partition by range (pid)(partition p1 values less than (101),partition p2 values less than (201));

beginfor i in 1..200 loopinsert into r_t1 values (i,i+1);end loop;end;

select table_name,PARTITIONED from dba_tables where table_name='R_T1';

select table_name,partition_name from dba_tab_partitions where table_name='R_T1';

SQL> select count(*) from r_t1 partition (p1);

create table l_t1 (id int,name varchar(20))partition by list (name)(partition p1 values ('湖北'),partition p2 values ('湖南'),partition p3 values ('安徽'));

SQL>select table_name,partition_name from dba_tab_partitions where table_name='L_T1';

3.创建哈希分区
SQL>CREATE TABLE sales01(sales_id INT, saleman CHAR(20),saledate DATETIME, city CHAR(10))PARTITION BY HASH(city)(PARTITION p1,PARTITION p2,PARTITION p3,PARTITION p4 );

如果不需指定分区表名,可以通过指定哈希分区个数来建立哈希分区表。
SQL>CREATE TABLE sales02(sales_id int, saleman char(20),saledate DATETIME, city CHAR(10)) PARTITION BYHASH(city)PARTITIONS 4;

PARTITIONS后的数字表示哈希分区的分区数,STORE IN 子句中指定了哈希分区依 次使用的表空间。使用这种方式建立的哈希分区表分区名是匿名的,DM7 统一使用 DMHASHPART+分区号(从 0 开始)作为分区名。例如,需要查询 sales02第一个分区的数据,可执行以下语句:
SQL>SELECT* FROM sales02 PARTITION (DMHASHPART1);

SQL> alter table r_t1 add partition p3 values less than(301);

查看分区数,可以看到新增了一个分区p3

SQL> alter table r_t1 drop partition p3;

可以看到,新增的分区P3被删除了。
Sql> alter table r_t1 merge partitions p1,p2 into partition p1_2;

SQL> alter table r_t1 split partition p1_2 at (100) into (partition p1,partition p2);

今天的分享就到这里了,感兴趣的同学赶紧去体验一下达梦的分区表吧!



最后修改时间:2020-06-12 17:55:47
文章转载自达梦大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





