达梦数据库分区表介绍
概述
本文将对达梦数据库分区表概念、创建、维护进行介绍。
1.分区表概念
1.1 分区表使用场景
近几年,随着移动支付快速发展,银行交易系统中【移动小微支付场景】使用越来越多,系统中流水账单表数据量巨大,往往上TB。
为了提高流水账单表查询等操作响应,该表设计可以采用分区表。反应到实际生活场景中,日常我们使用手机移动银行APP查个人账单,查询菜单里有按年、按月、按季度查询,流水账单表可以使用分区表进行多级分区,例如,季度、月、周。
总结:采用分区表有两个显示的收益:
对表读写响应更快
方便历史数据快速归档
1.2 DM分区表概念
达梦数据库对分区表设计有深度的思考,可以更好的支持业务发展。下面DM分区表概念:
分区是指将表、索引等数据库对象划分为较小的可管理片段的技术,每一个片段称为分区子表或分区索引。一个表被分区后,对表的查询操作可以局限于某个分区进行,而不是整个表,这样可以大大提高查询速度。
1.3 DM 分区方式
达梦数据库 DM 支持对表进行水平分区。对于水平分区,提供以下分区方式:
- 范围(range)水平分区:对表中的某些列上值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上;
- 哈希(hash)水平分区:通过指定分区编号来均匀分布数据的一种分区类型,通过在 I/O 设备上进行散列分区,使得这些分区大小基本一致;
- 列表(list)水平分区:通过指定表中的某个列的离散值集,来确定应当存储在一起的数据。例如,可以对表上的 status 列的值在('A','H','O')放在一个分区,值在('B','I','P')放在另一个分区,以此类推;
- 多级分区表:按上述三种分区方法进行任意组合,将表进行多次分区,称为多级分区表。
1.4 分区表优点
- 减少所有数据都损坏的可能性,一个表空间损坏不影响其他表空间,提高可用性;
- 恢复时间大大减少;
- 可以将同一个表中的数据分布在不同的磁盘上,从而均衡磁盘上的 I/O 操作;
- 提高了表的可管理性、可利用性和访问效率。
2.创建分区表
2.1创建范围分区表
范围分区非常适用于数据按时间范围组织的表,不同的时间段的数据属于不同的分区。
范围分区是按照某个列或几个列的值的范围来创建分区,当用户向表中写入数据时,数据库服务器将按照这些列上的值进行判断,将数据写入相应的分区中。
在创建范围分区时,首先要指定分区列,即按照哪些列进行分区,然后为每个分区指定数据范围。范围分区支持 MAXVALUE 范围值的使用,MAXVALUE 相当于一个比任何值都大的值。
举例,创建一个范围分区表callinfo,用来记录用户的2022年的电话通讯信息,包括主叫号码、被叫号码、通话时间和时长,并且根据季度进行分区。
CREATE TABLE callinfo( caller CHAR(15), callee CHAR(15),time DATETIME,duration INT)PARTITION BY RANGE(time)(PARTITION p1 VALUES LESS THAN ('2022-04-01'),PARTITION p2 VALUES LESS THAN ('2022-07-01'),PARTITION p3 VALUES LESS THAN ('2022-10-01'),PARTITION p4 VALUES EQU OR LESS THAN ('2022-12-31') );
通过DM 管理工具查看该表已经创建成功:

2.2创建LIST分区表
一般来说,对于数字型或者日期型的数据,适合采用范围分区的方法;而对于字符型数据,取值比较固定的,则适合于采用 LIST 分区的方法。
举例,创建一个产品销售记录表sales,记录产品的销量情况。由于产品只在几个固定的城市销售,所以可以按照销售城市对该表进行分区。
create table sales(sales_id INT,saleman CHAR(20),saledate DATETIME,city CHAR(10)
)PARTITION BY LIST(city)(PARTITION p1 VALUES ('北京', '天津'),PARTITION p2 VALUES ('上海', '南京', '杭州'),PARTITION p3 VALUES ('武汉', '长沙'),PARTITION p4 VALUES ('石家庄', '济南')
);
注意的是,LIST 分区的分区键必须唯一。
通过DM 管理工具查看该表已经创建成功:

2.3创建哈希分区表
DM哈希分区提供了一种在指定数量的分区中均等地划分数据的方法,基于分区键的散列值将行映射到分区中。当用户向表中写入数据时,数据库服务器将根据一个哈希函数对数据进行计算,把数据均匀地分布在各个分区中。
举例,创建销售表sales01:
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);
通过DM 管理工具查看该表已经创建成功:

2.4创建多级分区表
在很多情况下,经过一次分区并不能精确地对数据进分类,这时需要多级分区表。
举例,创建一个产品销售记录表 sales02,记录产品的销量情况。由于产品需要按地点和销售时间进行统计,则可以对该表进行 LIST-RANGE 分区。
CREATE TABLE SALES02( SALES_ID INT,SALEMAN CHAR(20),SALEDATE DATETIME,CITY CHAR(10))PARTITION BY LIST(CITY)SUBPARTITION BY RANGE(SALEDATE) SUBPARTITION TEMPLATE(SUBPARTITION P11 VALUES LESS THAN ('2012-04-01'),SUBPARTITION P12 VALUES LESS THAN ('2012-07-01'),SUBPARTITION P13 VALUES LESS THAN ('2012-10-01'),SUBPARTITION P14 VALUES EQU OR LESS THAN (MAXVALUE))(PARTITION P1 VALUES ('北京', '天津')(SUBPARTITION P11_1 VALUES LESS THAN ('2012-10-01'),SUBPARTITION P11_2 VALUES EQU OR LESS THAN (MAXVALUE)),PARTITION P2 VALUES ('上海', '南京', '杭州'),PARTITION P3 VALUES (DEFAULT));
通过DM 管理工具查看该表已经创建成功:

3.维护分区表
3.1增加分区
DM支持用ALTER TABLE ADD PARTITION语句将新分区增加到最后一个现存分区的后面。
举例,范围分区表callinfo现需要记录用户的2023年的第一季度的通讯信息,那么,需要为2023年第一季度增加一个分区:
ALTER TABLE callinfo ADD PARTITION p5 VALUES LESS THAN ('2023-4-1');
通过DM 管理工具查看p5分区已经添加:

对于范围分区,增加分区必须在最后一个分区范围值的后面添加,要想在表的开始范围或中间增加分区,应使用 SPLIT PARTITION 语句。
对于LIST分区,增加分区包含的离散值不能已存在于某个分区中。
例为LIST分区表sales添加一个分区管理沈阳和长春的销售情况:
ALTER TABLE sales ADD PARTITION p5 VALUES ('沈阳', '长春');
通过DM 管理工具查看该表已经新增了P5分区:

只能对范围分区和 LIST 分区增加分区,不能对哈希分区增加分区。
3.2删除分区
DM支持用ALTER TABLE DROP PARTITION语句将分区删除。
范围分区表callinfo现需要删除记录用户的2022年的第一季度的通讯信息,那么,只需删除 callinfo 的分区p1即可。
ALTER TABLE callinfo DROP PARTITION p1;
通过DM 管理工具查看该表p1分区已经删除:

3.3交换分区
假设上文提到的 callinfo 表是用于维护最近12个月的用户通话信息,超过12个月的订单需要迁移到该季度的通话信息历史表中,并且每一个季度都有一个相应的历史表。如果没有使用水平分区,需要较多的删除和插入操作,并产生大量的redo和undo日志。
如果使用分区表,如上文提到的 callinfo,只需使用交换分区即可完成以上功能。
创建表 callinfo_2022Q2:
CREATE TABLE callinfo_2022Q2(
caller CHAR(15),
callee CHAR(15),
time DATETIME,
duration INT
);
交换分区:
ALTER TABLE callinfo EXCHANGE PARTITION p2 WITH TABLE callinfo_2022Q2;
删除原分区:
ALTER TABLE callinfo DROP PARTITION p2;
新增分区,记录 2023 年第二季度通话记录:
ALTER TABLE callinfo ADD PARTITION p6 VALUES LESS THAN ('2023-7-1');
通过DM 管理工具查看callinfo表p2分区已经删除,p6分区已经添加。

通过交换分区实现分区p2和新建表callinfo_2022Q2的数据交换,表callinfo_2022Q2将得到2022年第二季度的通话记录,而分区p2数据将被清空。交换分区采用数据字典信息交换的技术,几乎不涉及IO操作,因此效率非常高。
仅范围分区和 LIST 分区支持交换分区,哈希分区表不支持。
3.4合并分区
举例,可将callinfo 的 2022第3季度和第4季度合并成一个分区:
ALTER TABLE callinfo MERGE PARTITIONS p3, p4 into partition p3_4;
通过DM 管理工具查看callinfo表p3和p4分区已经合并为p3_4分区:

3.5拆分分区
ALTER TABLE语句的SPLIT PARTITION子句被用于将一分区中的内容重新划分成两个新的分区。当一个分区变得太大以至于要用很长时间才能完成备份、恢复或维护操作时,就应考虑做分割分区的工作,还可以用SPLIT PARTITION子句来重新划分I/O负载。
举例,将合并后的p3_4拆分为原两分区 p3和p4,分别记录2022年第三和第四季度的通话记录:
ALTER TABLE callinfo SPLIT PARTITION p3_4 AT ('2022-9-30') INTO (PARTITION p3, PARTITION p4);
通过DM 管理工具查看callinfo表p3_4分区已经拆分为p3和p4分区:

总结
首先,本文通过在日常生活通过手机银行APP中查看流水账单表场景引入分区表,介绍了达梦数据库分区表概念、分区方式、及分区表优点;
其次,本文介绍了创建范围、LIST、哈希、多级分区表示例;
最后,本文介绍了分区表增删、交换、合并、拆分分区维护。
本文主要是抛砖引玉,关于达梦数据库分区表更多介绍请登录达梦数据库官网查看。
关于达梦数据库更多学习内容,欢迎访问达梦社区:
https://eco.dameng.com
相关文章:
达梦数据库分区表介绍
概述 本文将对达梦数据库分区表概念、创建、维护进行介绍。 1.分区表概念 1.1 分区表使用场景 近几年,随着移动支付快速发展,银行交易系统中【移动小微支付场景】使用越来越多,系统中流水账单表数据量巨大,往往上TB。 为了提高…...
Python爬虫库之urllib使用详解
一、Python urllib库 Python urllib 库用于操作网页 URL,并对网页的内容进行抓取处理。 Python3 的 urllib。 urllib 包 包含以下几个模块: urllib.request - 打开和读取 URL。 urllib.error - 包含 urllib.request 抛出的异常。 urllib.parse - 解…...
SpringCloud学习笔记(八)_使用Apollo做配置中心
由于Apollo支持的图形化界面相对于我们更加的友好,所以此次我们使用Apollo来做配置中心 本篇文章实现了使用Apollo配置了dev和fat两个环境下的属性配置。 Apollo官方文档https://github.com/ctripcorp/apollo/wiki 1.下载依赖 从https://github.com/ctripcorp/apo…...
jvs-rules(规则引擎)更新:新增功能介绍
jvs-rules更新内容 1.复合变量新增数据补充节点,实现请求回来的数据再以入参方式请求其他数据进行数据补充(例如通过参数A,请求回数据B,再以数据B为入参,请求回数据C) 2.规则流结束节点支持新增、新建、引…...
消息队列的消息异常处理
目录 1.如果消费端发生异常导致消息消费失败,补偿策略是什么 2.消息队列重试的话,如何保证消费的幂等性? 3.消息重发机制 1.如果消费端发生异常导致消息消费失败,补偿策略是什么 生产者发送消息失败: 设置mandato…...
APP上线为什么要提前部署安全产品呢?
一般平台刚上线或者日活跃量比较高的时候,很容易成为攻击者的目标,服务器如果遭遇黑客攻击,资源耗尽会导致平台无法访问,业务也无法正常开展,服务器一旦触发黑洞机制,就会被拉进黑洞很长一段时间࿰…...
SQL注入之HTTP头部注入
文章目录 cookie注入练习获取数据库名称获取版本号 base64注入练习获取数据库名称获取版本号 user-agent注入练习获取数据库名称获取版本号 cookie注入练习 向服务器传参三大基本方法:GPC GET方法,参数在URL中 POST,参数在body中 COOKIE,参数…...
软考高级系统架构设计师系列论文九十七:论软件三层结构的设计
软考高级系统架构设计师系列论文九十七:论软件三层结构的设计 一、软件结构相关知识点二、摘要三、正文四、总结一、软件结构相关知识点 软考高级系统架构设计师:软件架构设计系列二二、摘要 随着中间件与Web技术的发展,三层或多层分布式应用体系越来越流行。在这种体系结构…...
【C++心愿便利店】No.2---函数重载、引用
文章目录 前言🌟一、函数重载🌏1.1.函数重载概念🌏1.2.C支持函数重载的原理 -- 名字修饰 🌟二、引用🌏2.1.引用的概念🌏2.2.引用特性🌏2.3.常引用🌏2.4.使用场景🌏2.5.传…...
掌握Six Sigma:逐步解锁业务流程优化的秘密之匙
一、Six Sigma方法简介 1. Six Sigma的起源和概念 Six Sigma起源于1980年代的摩托罗拉公司。当时的摩托罗拉在面临激烈的全球竞争和持续的质量问题时,发明了这种系统的管理方法,并通过实施,获得了显著的成绩。 所谓的“Six Sigma”&#x…...
Python中使用print()时如何实现不换行
平时刷题的时候大家可能会发现打印字符的时候需要你不换行才能得到正确答案,那么如何实现的。下面直接看例子。 使用print()函数时其实还有个默认的参数end,来看看具体怎么回事 list [a,b,c] for i in list:print(i)打印结果: 这是不加参…...
WordPress使用子主题插件 Child Theme Wizard,即使主题升级也能够保留以前主题样式
修改WordPress网站样式,主题升级会导致自己定义设置的网站样式丢失,还需要重新设置,很繁琐工作量大,发现在WordPress 中有Child Theme Wizard子主题插件,使用Child Theme Wizard子主题插件,即使主题升级&am…...
人员跌倒检测识别预警
人员跌倒检测识别预警系统通过pythonopencv深度学习网络模型架构,人员跌倒检测识别预警系统实时监测老人的活动状态,通过图像识别和行为分析算法,对老人的姿态、步态等进行检测和识别,一旦系统检测到跌倒事件,立即发出…...
C#,《小白学程序》第二课:数组与排序
1 文本格式 /// <summary> /// 《小白学程序》第二课:数组与排序 /// </summary> /// <param name"sender"></param> /// <param name"e"></param> private void button2_Click(object sender, EventArgs …...
2023有哪些更好用的网页制作工具
过去,专业人员使用HTMLL、CSS、Javascript等代码手动编写和构建网站。现在有越来越多的智能网页制作工具来帮助任何人实现零代码基础,随意建立和设计网站。在本文中,我们将向您介绍2023年流行的网页制作工具。我相信一旦选择了正确的网页制作…...
Keepalived(一)
高可用集群 High Availability Cluster,简称HA Cluste。以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低导最低 衡量可用性:在线时间/ÿ…...
cs231n assignment3 q5 Self-Supervised Learning for Image Classification
文章目录 嫌墨迹直接看代码Q5 Self-Supervised Learning for Image Classificationcompute_train_transform CIFAR10Pair.__getitem__()题面解析代码输出 simclr_loss_naive题面解析代码输出 sim_positive_pairs题面解析代码输出 compute_sim_matrix题面解析代码输出 simclr_lo…...
电商首屏设计
1、主图最后成图效果 1.1 最后效果 1.2 主图尺寸,建多大的空白画布 1.3 如何让猜你喜欢展示跟搜索系统不一样的界面 2、实际操作方案 2.1 矩形屏信息 宽度为765 px 高度为770px; 2.2 第一步 矩形屏 2.3 第二步 填充颜色到空白 2.4 Crty j 复制图层 …...
SpringBoot集成Redis
Redis 的介绍 Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,它被广泛地应用于缓存、计数器、限速器、消息队列、分布式锁等多种场景中。Redis 支持多种数据结构,包括字符串、散列、列表、集合和有序集合等&…...
qt 的基础学习计划列表
1 第一天 (qt 的基础) 什么是qt hello程序,空窗口 添加按钮(对象树、父子关系) 按钮的功能(信号和槽) 信号和槽的拓展2 第二天 各个控件 最简单的记事本界面(菜单栏、状态栏、工具…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
