达梦分布式集群DPC_表分区方式详细介绍_yxy

devtools/2025/2/8 6:21:26/

达梦分布式集群DPC_表分区方式详细介绍

  • 1 范围分区
    • 1.1 建表语句示例
    • 1.2 优劣势分析
  • 2 间隔分区
    • 2.1 建表语句示例
    • 2.2 优劣势
  • 3 HASH分区
    • 3.1 建表示例
    • 3.2 优劣势分析
  • 4 列表分区
    • 4.1 建表示例
    • 4.2 优劣势分析
  • 5 以上分区组成的复合分区
    • 5.1 建表示例
    • 5.2 优劣势分析
  • 6 分区方式适合场景

1 范围分区

根据分区键的取值范围来划分分区

1.1 建表语句示例

最常见的以时间划分
例如

--建表语句为
CREATE TABLE TEST01
(
"ID" VARCHAR2(36) NOT NULL,
"DATE" TIMESTAMP(0) NOT NULL
)PARTITION BY RANGE("DATE")
(
PARTITION P201001  VALUES LESS THAN(DATETIME'2010-01-01 00:00:00'),
PARTITION P201501  VALUES LESS THAN(DATETIME'2015-01-01 00:00:00'),
PARTITION P202001  VALUES LESS THAN(DATETIME'2020-01-01 00:00:00'),
PARTITION P202501  VALUES LESS THAN(DATETIME'2025-01-01 00:00:00'),
PARTITION  "PMAX"  VALUES LESS THAN(MAXVALUE));--分析
语句以DATE列作为分区键,创建了总共5个子表的分区表;
小于'2010-01-01 00:00:00'的值,存储在P201001分区中,大于等于'2025-01-01 00:00:00'的值统一存储在PMAX分区中;

1.2 优劣势分析

优点
1.对于按范围查询的场景,如查询某一年度、某月数据,数据库能够快速定位到对应的分区,避免全表扫描,极大提升查询性能。

2.同时也方便分区管理,比如处理某个年月数据,只需要针对对应的分区进行处理即可。

3.插入性能远优于间隔分区。(间隔分区每插入一行数据,数据库内部都会判断)

缺点
1.需要预先定义分区范围,不适合动态变化的分区键。

2.在需要创建特别多分区的场景,比如以 “天” 来划分分区,DDL语句会特别慢,因为每个子表都会操作DDL,如果一个总表有1w个子表,那要操作1w次DDL语句;

3.如果分区键的值分布不均匀,可能导致某些分区数据量过大,影响查询性能。

2 间隔分区

间隔分区是特殊得范围分区,也以时间列作为分区键为例

2.1 建表语句示例

--建表语句
CREATE TABLE TEST01
(
"ID" VARCHAR2(36) NOT NULL,
"DATE" TIMESTAMP(0) NOT NULL
)PARTITION BY RANGE("DATE")
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION P202409  VALUES LESS THAN(DATETIME'2024-09-01 00:00:00'),
PARTITION P202410  VALUES LESS THAN(DATETIME'2024-10-01 00:00:00'),
PARTITION P202411  VALUES LESS THAN(DATETIME'2024-11-01 00:00:00'),
PARTITION P202412  VALUES LESS THAN(DATETIME'2024-12-01 00:00:00'),
PARTITION P202501  VALUES LESS THAN(DATETIME'2025-01-01 00:00:00'),
PARTITION P202502  VALUES LESS THAN(DATETIME'2025-02-01 00:00:00')
);--分析
语句也以DATE列作为分区键,手动创建了6个子表的间隔分区表;
小于'2024-09-01 00:00:00'的值,存储在P202409分区中,超过或者等于'2025-01-01 00:00:00'的值,间隔分区会进行判断后,以月为间隔单位,新建一个子表;比如插入数据'2025-02-01 00:00:00',就会新建一个
PARTITION "分区子表名" VALUES LESS THAN(DATETIME'2025-03-01 00:00:00')子表

2.2 优劣势

优点
1.更方便管理,不用手动创建多个分区,属于哪个分区是数据库内部自动创建;

2.子表数少于范围分区,DDL效率会更佳;

缺点
1.不适合insert和update多的场景,每插入一条数据,内部都会判断数据属于哪个分区,是否需要新增分区,插入和更新效率会特别慢;

3 HASH分区

哈希分区是根据哈希函数的结果进行分区,确保数据均匀分布。

3.1 建表示例

CREATE TABLE TEST (ID INT,NAME INT
)
PARTITION BY HASH (ID) 
PARTITIONS 4;--分析
创建一个4个子表的HASH分区表,分区键为ID列

3.2 优劣势分析

优势:
1.数据分布均匀,适合需要负载均衡的场景。

劣势:
1.无法利用分区裁剪,每个操作只能全表扫,查询性能可能不如范围分区或列表分区,数据量很大后,会造成资源浪费。
2.分区数量固定,调整分区数量需要重新分布数据。

最常用的是HASH(主键列)

4 列表分区

列表分区是根据某个离散值列表进行分区。

4.1 建表示例

按地区列表分区的表创建示例:

CREATE TABLE orders (order_id INT,region VARCHAR(50),order_date DATE,amount DECIMAL(10, 2)
)
PARTITION BY LIST (region) (PARTITION p_east VALUES IN ('Beijing', 'Shanghai', 'Guangzhou'),PARTITION p_west VALUES IN ('Chengdu', 'Chongqing', 'Xian'),PARTITION p_north VALUES IN ('Shenyang', 'Harbin', 'Changchun')
);

4.2 优劣势分析

跟范围分区类似

优势:
1.适用于按离散值查询的场景,能够快速定位到特定分区。
2.灵活性高,可以根据业务需求动态调整分区列表。

劣势:
1.如果分区键的值过多,可能导致分区数量过多,增加管理复杂度。
2.不适合分区键值频繁变化的场景。

5 以上分区组成的复合分区

复合分区是结合多种分区策略的分区方式。

5.1 建表示例

CREATE TABLE TEST
(
"ID" VARCHAR2(100),
"DATE_01" TIMESTAMP(0))
PARTITION BY RANGE("DATE_01")
SUBPARTITION BY HASH("ID") SUBPARTITION TEMPLATE
SUBPARTITIONS 10
(
PARTITION P01  VALUES LESS THAN(DATETIME'2024-11-01 00:00:00'),
PARTITION P02  VALUES LESS THAN(DATETIME'2024-12-01 00:00:00'),
PARTITION P03  VALUES LESS THAN(DATETIME'2025-01-01 00:00:00'),
PARTITION  "PMAX"  VALUES LESS THAN(MAXVALUE));--分析
sql创建一个范围+HASH的二级分区表
每个范围下分成10个子表,避免了先范围分区后,数据分布不均匀的情况

5.2 优劣势分析

优势:
1.灵活性高,可以结合多种分区策略的优点。
2.适用于复杂业务场景,能够精细化管理数据。

劣势:
1.设计和管理复杂度较高。
2.分区数量可能非常多,增加元数据管理开销,DDL语句也会慢。

6 分区方式适合场景

在这里插入图片描述

下一篇:
达梦分布式集群DPC_表分区最佳实践_yxy


更多其他数据库相关专栏:
数据库性能优化(sql优化)_基本思路_yxy
数据库性能优化(sql优化)_索引详解01_yxy(共4篇)
数据库性能优化(sql优化)_SQL执行计划01_yxy(共3篇)
数据库性能优化(sql优化)_统计信息_yxy


http://www.ppmy.cn/devtools/157028.html

相关文章

工作总结:上线篇

文章目录 前言一、上线流程二、各种问题流水线问题1.编译问题2.单测问题3.磁盘空间问题 发单问题上线后的问题前后端合作的情况后端项目和后端项目合作的情况后端项目和小程序合作的情况自己的项目代码的情况(无任何合作)发单问题 前言 上线算是我工作中…

部署DeepSeek-R1-Distill-Qwen-7B并进行推理

下载模型文件: 将https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B/tree/main目录下面的所有文件全部下载下来,稍微有点大,所有文件将近16个G 编写代码进行推理 $ more testDS.py from transformers import AutoModelForC…

基于keepalived+GTID半同步主从复制的高可用MySQL集群

文章目录 项目架构图项目名称项目环境项目描述ip地址规划项目步骤一.安装好8台全新的centos7.9的系统,关闭firewalld和selinux,配置每台主机的静态ip地址,设置每台主机对应的主机名。1、关闭firewalld2.关闭seLinux3.配置每台主机静态ip地址4…

测试驱动开发(TDD)实践:从理论到实践

测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,其核心理念是“先写测试,再写代码”。与传统的开发方式不同,TDD并非开发完成后再进行测试,而是将测试置于开发的前沿&#x…

QT通过setProperty设置不同QSS样式

如上切换效果就是通过setProperty来实现切换不同颜色的。 实现以上效果第一步,需要在QSS中做属性处理。 QLabel{color:red;} QLabel[status"1"]{color:black;} QLabel[status"2"]{color:white;} QLabel[status"3"]{color:blue;} QLa…

centos系统清理docker日志文件

在CentOS系统中,Docker日志文件的不断增长可能会占用大量磁盘空间,影响系统性能和正常运行。为了保持系统的健康状态,需要定期清理Docker日志文件。本文将详细介绍如何在CentOS系统上清理Docker日志文件的具体步骤和方法。 Docker日志文件位…

GitHub 使用教程:从入门到进阶

1. GitHub账号注册 访问 GitHub 官网 (https://github.com)点击 “Sign up” 按钮填写用户名、邮箱和密码验证邮箱完成注册 2. 基础配置 2.1 安装Git 访问 Git 官网下载安装包运行安装程序,按提示完成安装打开终端,设置用户信息: git co…

基于知乎平台的“开源AI智能名片2 + 1链动模式S2B2C商城小程序”引流策略研究

摘要:本文聚焦于如何借助知乎平台的高权重及优质用户特性,对“开源AI智能名片2 1链动模式S2B2C商城小程序”进行有效引流。通过深入分析知乎平台的用户特点、引流规则,并结合具体的引流方法,旨在为相关项目在知乎平台实现高效用户…