asp.net企业网站源码,m8 wordpress主题,网站建设首先要学会什么,wordpress屏蔽首页概述
本文将对达梦数据库分区表概念、创建、维护进行介绍。 1.分区表概念 1.1 分区表使用场景
近几年#xff0c;随着移动支付快速发展#xff0c;银行交易系统中【移动小微支付场景】使用越来越多#xff0c;系统中流水账单表数据量巨大#xff0c;往往上TB。
为了提高…
概述
本文将对达梦数据库分区表概念、创建、维护进行介绍。 1.分区表概念 1.1 分区表使用场景
近几年随着移动支付快速发展银行交易系统中【移动小微支付场景】使用越来越多系统中流水账单表数据量巨大往往上TB。
为了提高流水账单表查询等操作响应该表设计可以采用分区表。反应到实际生活场景中日常我们使用手机移动银行APP查个人账单查询菜单里有按年、按月、按季度查询流水账单表可以使用分区表进行多级分区例如季度、月、周。
总结采用分区表有两个显示的收益
对表读写响应更快
方便历史数据快速归档
1.2 DM分区表概念
达梦数据库对分区表设计有深度的思考可以更好的支持业务发展。下面DM分区表概念
分区是指将表、索引等数据库对象划分为较小的可管理片段的技术每一个片段称为分区子表或分区索引。一个表被分区后对表的查询操作可以局限于某个分区进行而不是整个表这样可以大大提高查询速度。
1.3 DM 分区方式
达梦数据库 DM 支持对表进行水平分区。对于水平分区提供以下分区方式
范围(range)水平分区对表中的某些列上值的范围进行分区根据某个值的范围决定将该数据存储在哪个分区上哈希hash水平分区通过指定分区编号来均匀分布数据的一种分区类型通过在 I/O 设备上进行散列分区使得这些分区大小基本一致列表list水平分区通过指定表中的某个列的离散值集来确定应当存储在一起的数据。例如可以对表上的 status 列的值在(AHO)放在一个分区值在(BIP)放在另一个分区以此类推多级分区表按上述三种分区方法进行任意组合将表进行多次分区称为多级分区表。
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