✅ 二、支持的分区类型(MySQL 5.7+)
| 类型 | 描述 | 示例 |
|
| RANGE | 按范围划分(如日期、数值) | `PARTITION BY RANGE (YEAR(order_date))` |
| LIST | 按枚举值划分(如地区、状态) | `PARTITION BY LIST (country_code)` |
| HASH | 哈希算法分配到固定数量分区 | `PARTITION BY HASH (user_id) PARTITIONS 4` |
| KEY | 类似 HASH,但用 MySQL 内部哈希函数 | `PARTITION BY KEY (id) PARTITIONS 3` |
⚠️ 注意:`RANGE` 和 `LIST` 支持子分区(Subpartitioning)。
✅ 三、创建分区表示例
1、RANGE 分区(按年份)
sql
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 p_future VALUES LESS THAN MAXVALUE
);
2、HASH 分区(均匀分布)
sql
CREATE TABLE users (
id INT,
name VARCHAR(50)
) PARTITION BY HASH (id) PARTITIONS 4;
3、子分区(Range + Hash)
sql
CREATE TABLE sales (
id INT,
sale_date DATE,
amount DECIMAL(10,2)
) PARTITION BY RANGE (YEAR(sale_date))
SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025)
);
✅ 四、查看分区信息
sql
查看表分区结构
SHOW CREATE TABLE your_table;
查看分区详情
SELECT
TABLE_NAME,
PARTITION_NAME,
PARTITION_METHOD,
PARTITION_EXPRESSION,
PARTITION_DESCRIPTION
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'your_table';
✅ 五、常用操作
| 操作 | SQL 示例 |
| 添加新分区 | `ALTER TABLE orders ADD PARTITION (PARTITION p2025 VALUES LESS THAN (2026));` |
| 删除分区 | `ALTER TABLE orders DROP PARTITION p2023;` |
| 合并分区 | `ALTER TABLE orders REORGANIZE PARTITION p2023 INTO (PARTITION p2023_2024 VALUES LESS THAN (2025));` |
| 重新分区 | `ALTER TABLE orders REORGANIZE PARTITION p2023 INTO (PARTITION p2023a VALUES LESS THAN (2024), ...);` |