欢迎来到程序员中文网!

首页 Linux Mysql C++ Python PHP JavaScript 资源下载 动态 开源推荐
我要投稿 投诉建议

MySQL 分区表:Range、List 与 Hash

时间:2026年08月12日 04:46:50 浏览:1

分区类型介绍


分区将一张大表物理拆分为多个小表,对应用层透明,能显著提升查询和维护效率。


1. RANGE 分区(最常用)


适合按时间范围划分。


CREATE TABLE orders (
id INT,
order_date DATE,
amount DECIMAL(10,2)
)
PARTITION BY RANGE (YEAR(order_date)) (
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION p2025 VALUES LESS THAN (2026),
PARTITION p_future VALUES LESS THAN MAXVALUE
);

2. LIST 分区


适合枚举值,如地区、状态。


PARTITION BY LIST (status) (
PARTITION p_active VALUES IN (1, 2, 3),
PARTITION p_inactive VALUES IN (0, 4)
);

3. HASH 分区


均匀分布数据,适合没有明显时间或类别特征的场景。


PARTITION BY HASH (id) PARTITIONS 8;

管理操作


-- 新增 RANGE 分区
ALTER TABLE orders ADD PARTITION (PARTITION p2026 VALUES LESS THAN (2027));

-- 删除分区(快速清理历史数据)
ALTER TABLE orders DROP PARTITION p2023;

-- 查看分区信息
SELECT * FROM information_schema.PARTITIONS WHERE TABLE_NAME = 'orders';

建议单表超过 5000 万行或 50GB 时考虑分区。