一. 范围分区 (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)
);
文章
阅读量
获赞
