1.1. 分区的概念和种类
分区是指将表、索引等数据库对象划分为较小的可管理片段的技术,每一个片段称为分区子表或分区索引。一个表被分区后,对表的查询操作可以局限于某个分区进行,而不是整个表,这样可以大大提高查询速度。
达梦采用子表方式创建分区表,分区表作为分区主表,而每一个分区以一个子表实体存在,即每一个分区都是一个完整的表,一般命名为主表名_分区名。对于水平分区,子表跟主表具有相同的逻辑结构,即分区子表与分区主表有相同的列定义和约束定义。在 DM 分区表中,主表本身不存储数据,所有数据只存储在子表中,从而实现不同分区的完全独立性。水平分区子表删除后,会将子表上的数据一起删除。
达梦提供了水平分区方式。水平分区包括范围、哈希和列表三种方式。
范围分区是一种较为常见的分区方式,本文会对范围分区的创建、修改等做详细的介绍。
1.2. 分区的优点
a. 改善查询性能:通过限制查询范围到单个或多个分区,可以显著提高数据检索效率。
b. 增加可用性:如果某个分区出现故障,其他分区中的数据仍然可以使用,从而保持数据的整体可用性。
c. 维护方便:可以对单个分区执行如TRUNCATE或DROP等操作,提高了表维护的灵活性和效率。
d. 均衡I/O:通过将不同的分区分配到不同的表空间,可以实现磁盘I/O的均衡,从而提高整体数据库性能。
在“表”节点上点鼠标右键,选择“新建表”;
输入表名,添加字段,本文示例建表PROD,分区列整形值ProdID
点“分区”添加分区,选水平分区
点“添加分区”确定分区涉及的列
点“添加分区项”逐个添加分区,在分区项上设置 边界值,如1010,表空间如DMTS01
继续点“添加分区”,通过设置 maxvalue,实现对氛围的封闭
通过以上图形化操作,我们知道了范围分区表的创建过程,对范围分区表的特点也有了很好的认识。基于此,如果我们很熟悉达梦的分区表语法,也可以参考如下示例,直接通过语句建分区表。
create table "DMTEST"."PROD"
(
"ProdID" INTEGER not null ,
"ProdName" VARCHAR(50),
"Code" VARCHAR(10),
"ReOrder" INTEGER,
"Cost" NUMBER(30, 2),
"Price" NUMBER(30, 2),
"PriSrc" VARCHAR(20),
"SecSrc" VARCHAR(10),
"ObsoletedDate" DATE
)
PARTITION BY RANGE ("ProdID")
(
PARTITION "P1" VALUES LESS THAN (1010) STORAGE( initial 1, next 1, minextents 1, fillfactor 0, on "DMTS01"),
PARTITION "P2" VALUES LESS THAN (1020) STORAGE( initial 1, next 1, minextents 1, fillfactor 0, on "DMTS02"),
PARTITION "P3" VALUES LESS THAN (1030) STORAGE( initial 1, next 1, minextents 1, fillfactor 0, on "DMTS03"),
PARTITION "P4" VALUES LESS THAN (MAXVALUE) STORAGE( initial 1, next 1, minextents 1, fillfactor 0, on "DMTS04")
)
storage(initial 1, next 1, minextents 1, fillfactor 0);
RANGE是关键字,后面()中是做分区的字段。需要注意的是,范围一定要完毕,后文通过对范围调整的介绍,可以让大家对范围的完备有更感性的认识。最后建好表后,每个分区成为一个子表,效果如下:
4.1. 分区表调整的注意事项
在修改分区方案之前,需要先备份数据库中的数据,以防止数据丢失或损坏。可以使用达梦数据库的备份工具进行数据备份。
4.2. 通过语句了解现有分区情况
SELECT * FROM SYS_DBA_PART_TABLES WHERE TABLE_NAME='PROD' --看表的概况
SELECT * FROM SYS_DBA_PART_KEY_COLUMNS WHERE NAME='PROD'--看表分区涉及的列
SELECT * FROM SYS_DBA_TAB_PARTITIONS WHERE TABLE_NAME='PROD'--看具体的分区和范围等
4.2. 添加一个分区
假设我们要加一个分区,我们可以如下操作:
ALTER TABLE DMTEST."PROD" ADD PARTTON "P4_1" VALUES LESS THAN(1050)
我们会发现,系统会报“范围分区值非递增”的错误。这是因为原来的P4这个LESS THAN(MAXVALUE)边缘分区的范围已经涵盖了1050。这个时候,我们可以删除P4后再新增。
4.3. 删除一个分区
假设我们要删除一个分区,我们可以如下操作:
ALTER TABLE DMTEST."PROD" DROP PARTTON "P4"
再添加P4_1分区就可以成功了:
4.3. 已经建的分区表,分区范围不封闭的影响
前面删除P4,添加P4_1后,我们再查看一下相关分区情况:
这个时候,我们执行下面的代码,插入新的数据
insert into DMTEST.PROD values (1099,'DaMeng Database 8.0','server',1,35.99,28.73,'Redwood Shores','Reston','2022-02-14')
系统会提示“没有找到合适的分区”,这是因为1099不在我们创建的任何一个分区范围内。这也说明分区范围规划的重要性。
本文简单介绍了达梦的分区表概念,同时对范围分区的创建方式,范围分区的调整方式进行了详细介绍。在建范围分区时,一定要提前做好分区范围的规划。当然,随着系统运行一段时间,也可以根据需要,对分区范围和分区数量进行调整。
文章
阅读量
获赞