注册
如何规划并创建分区表
专栏/技术分享/ 文章详情 /

如何规划并创建分区表

2026/07/17 200 0 0
摘要

四种分区方式的选择

一. 范围分区 (RANGE Partition)

范围分区是按照某个列或几个列的值的范围来创建分区,当用户向表中写入数据时,数据库服务器将按照这些列上的值进行判断,将数据写入相应的分区中。

分区特点:
1、数据按连续区间划分,如日期范围、价格区间、ID区间
2、最常见的场景是按时间组织数据(如按季度、月份、年份)
3、分区列值可以明确比较大小

创建示例:

CREATE TABLE orders ( order_id INT, order_date DATETIME, amount DECIMAL(10,2) ) PARTITION BY RANGE(order_date) ( PARTITION p2023q1 VALUES LESS THAN ('2023-04-01'), PARTITION p2023q2 VALUES LESS THAN ('2023-07-01'), PARTITION p2023q3 VALUES LESS THAN ('2023-10-01'), PARTITION p2023q4 VALUES EQU OR LESS THAN ('2023-12-31') );

二. 列表分区 (LIST Partition)

范围分区是按照某个列上的数据范围进行分区的,如果某个列上的数据无法通过划分范围的方法进行分区,并且该列上的数据是相对固定的一些值,可以考虑使用 LIST 分区。一般来说,对于数字型或者日期型的数据,适合采用范围分区的方法;而对于字符型数据,取值比较固定的,则适合于采用LIST 分区的方法。

分区特点:
1、分区列的值是固定的离散值集合
2、无法通过范围划分,但取值相对固定
3、通常用于字符型数据(地区、状态、类别等)

创建示例:

CREATE TABLE product_sales ( sale_id INT, product_name VARCHAR(50), region VARCHAR(20), sale_date DATE ) PARTITION BY LIST(region) ( PARTITION p_north VALUES ('北京', '天津', '沈阳'), PARTITION p_east VALUES ('上海', '南京', '杭州'), PARTITION p_south VALUES ('广州', '深圳', '厦门'), PARTITION p_other VALUES (DEFAULT) );

三. 哈希分区 (HASH Partition)

DM 哈希分区提供了一种在指定数量的分区中均等地划分数据的方法,基于分区键的散列值将行映射到分区中。当用户向表中写入数据时,数据库服务器将根据一个哈希函数对数据进行计算,把数据均匀地分布在各个分区中。在哈希分区中,用户无法预测数据将被写入哪个分区中。

分区特点:
1、无法预测数据范围或离散值
2、希望数据在多个分区中均匀分布
3、分区列的值分布较为分散

创建示例(指定分区数):

CREATE TABLE user_log ( user_id INT, log_time DATETIME, action VARCHAR(100) ) PARTITION BY HASH(user_id) PARTITIONS 8;

四. 多级分区 (Composite Partition)

分区特点:
1、单一分区方式无法满足业务需求,需要多种分区配合。
2、需要多维度管理数据(如按地区+时间)
3、支持最多8层嵌套分区

– 先按地区分区,再按时间分区(LIST-RANGE)
– 先按时间分区,再按类别分区(RANGE-LIST)
– 先按ID哈希分区,再按日期范围分区(HASH-RANGE)

创建示例(LIST-RANGE多级):

CREATE TABLE sales_multi ( sales_id INT, saleman CHAR(20), saledate DATETIME, city CHAR(10) ) PARTITION BY LIST(city) SUBPARTITION BY RANGE(saledate) SUBPARTITION TEMPLATE ( SUBPARTITION sp1 VALUES LESS THAN ('2023-04-01'), SUBPARTITION sp2 VALUES LESS THAN ('2023-07-01'), SUBPARTITION sp3 VALUES LESS THAN ('2023-10-01'), SUBPARTITION sp4 VALUES EQU OR LESS THAN (MAXVALUE) ) ( PARTITION p_north VALUES ('北京', '天津'), PARTITION p_south VALUES ('广州', '深圳'), PARTITION p_other VALUES (DEFAULT) );
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服