1、 说明
在系统建设初期,有些业务没有考虑数据量膨胀的问题,使用非分区表存储业务数据,随着时间推移,数据量越来越大,普通表出现各种性能问题,此时可以考虑将普通表转换为分区表,提升数据库的性能。
分区是指将表、索引等数据库对象划分为较小的可管理片段的技术,每一个片段称为分区子表或分区索引。一个表被分区后,对表的查询操作可以局限于某个分区进行,而不是整个表,这样可以大大提高查询速度。
将非分区表转换为分区表,有多种方案,常见的有使用逻辑导入导出的方式,或者使用分区交换技术,本文主要介绍分区交换技术。
2、注意事项
- 分区交换仅支持范围和列表分区,不支持HASH分区。
- 分区交换时不会进行数据校验,如果交换表的数据不符合分区范围,数据仍然会进入该分区。此时如果是范围分区可以使用split拆分分区,系统会自动对数据进行重组。
- 分区交换要求分区表与交换表具有相同的结构(相同的表类型、相同的列结构及相同的精度、相同的索引、相同的分布方式),否则会报“[-7000]:交换对象不匹配”的错误。
- 在生产环境中,为保证数据安全,建议对源表的数据备份后再做分区交换。
3、环境说明
操作系统:CentOS Linux release 7.7.1908 (Core)
数据库版本:DM Database Server 64 V8
4、操作方案
4.1、创建测试用户
SQL> create user shen identified by "Dameng123"; 操作已执行 已用时间: 5.589(毫秒). 执行号:503. SQL> grant resource to shen; 操作已执行 已用时间: 5.427(毫秒). 执行号:504.
复制
4.2、创建非分区表
SQL> create table TEST_1 (id int,name varchar(20)); SQL> begin for i in 1..500 loop insert into TEST_1(id, name) values(i, DBMS_RANDOM.RANDOM_STRING('U',5)||':'|| lpad(i,4, '0')); end loop; end; /2 3 4 5 6 7 DMSQL 过程已成功完成 已用时间: 96.135(毫秒). 执行号:800. SQL> SELECT COUNT(*) FROM TEST_1; 行号 COUNT(*) ---------- -------------------- 1 500 已用时间: 0.277(毫秒). 执行号:806.
复制
4.3、创建分区表
SQL> create table TEST_2 ( id int, name varchar(20) ) partition by range(id) ( partition p1 values less than (100), partition p2 values less than (200), partition p3 values less than (300), partition p4 values less than (400), partition pN values less than (maxvalue)); 操作已执行 已用时间: 116.693(毫秒). 执行号:801. SQL>
复制
4.4、执行分区交换
SQL> alter table TEST_2 exchange partition pN with table TEST_1; 分区交换完成后,原来的非分区表(TEST1)数据为空,数据会转移到分区表中(TEST2)。 SQL> SELECT COUNT(*) FROM TEST_1; 行号 COUNT(*) ---------- -------------------- 1 0 已用时间: 0.386(毫秒). 执行号:808. SQL> SELECT COUNT(*) FROM TEST_2; 行号 COUNT(*) ---------- -------------------- 1 500 已用时间: 0.369(毫秒). 执行号:809. SQL>
复制
由于数据未进行校验,所有数据都进入了一个分区,即使数据不满足要求。
select 'p1' partition_name, count(*) num from TEST_2 partition(p1) union all select 'p2', count(*) from TEST_2 partition(p2) union all select 'p3', count(*) from TEST_2 partition(p3) union all select 'p4', count(*) from TEST_2 partition(p4) union all select 'pN', count(*) from TEST_2 partition(pN); 行号 PARTITION_NAME NUM -------- -------------- -------------------- 1 p1 0 2 p2 0 3 p3 0 4 p4 0 5 pN 500 已用时间: 0.493(毫秒). 执行号:810.
复制
4.5、分区拆分
alter table TEST_2 split partition pN at (1000) into (partition p5, partition pmax); 6 rows got 已用时间: 0.491(毫秒). 执行号:811.
复制
4.6、验证
select 'p1' partition_name, count(*) num from TEST_2 partition(p1) union all select 'p2', count(*) from TEST_2 partition(p2) union all select 'p3', count(*) from TEST_2 partition(p3) union all select 'p4', count(*) from TEST_2 partition(p4) union all select 'p5', count(*) from TEST_2 partition(p5) union all select 'pmax', count(*) from TEST_2 partition(pmax); 行号 PARTITION_NAME NUM ------- -------------- -------------------- 1 p1 99 2 p2 100 3 p3 100 4 p4 100 5 p5 101 6 pmax 0
复制
数据已均匀分布至各分区中。
更多学习资料请访问:https://eco.dameng.com
最后修改时间:2023-03-30 09:58:43
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月国产数据库大事记:4个千万级中标项目诞生!2024年达梦净利3.6亿、金仓净利8006.6万……
墨天轮编辑部
2295次阅读
2025-04-30 17:39:54
国产数据库图谱又上新|82篇精选内容全览达梦数据库
墨天轮编辑部
290次阅读
2025-04-23 12:04:21
在线重定义——分区表改造
Digital Observer
223次阅读
2025-04-26 21:15:40
国产数据库必修课已上新|达梦数据库,从入门到实战
墨天轮-雪宝君
222次阅读
2025-04-28 14:25:11
达梦中国数据库产业基地竣工,光谷崛起“数据之弧”
通讯员
163次阅读
2025-04-23 09:41:05
SQLark V3.4 更新 | 新增 PostgreSQL 数据库支持、SQL 常用代码段、表设计器体验升级,超多新功能等你来探索!
达梦产品与服务
141次阅读
2025-04-17 09:38:11
达梦数据年报首秀:“国产数据库第一股”研发投入力度落后,是“研发驱动”还是“销售驱动”?
通讯员
135次阅读
2025-05-13 09:30:07
中国软件深度研究报告:打造操作系统、数据库央企龙头
通讯员
91次阅读
2025-04-21 12:20:29
【干货】磐维数据库-磐维删除分区数据测试
磐维数据库
88次阅读
2025-04-24 19:53:42
一季度营收净利双增长,达梦数据加速构建数据库创新生态圈
通讯员
86次阅读
2025-05-06 09:43:28