外观
哈希分区和键分区的管理
哈希分区
mysql
# 创建一张具有10个哈希分区的数据表
create table clients (
id int,
fname varchar(30),
lname varchar(30),
signed date
)
partition by hash( month(signed) )
partitions 10;
# 把分区数量从 10 个变成 6 个 (即,合并掉 4 个分区)
alter table clients coalesce partition 4;1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
coalesce partition
需要注意,coalesce partition 后面的数字表示要删除的分区数。
增加分区(扩容):
mysql
# 追加 6 个分区,整体扩容拆分数据
ALTER TABLE clients ADD PARTITION PARTITIONS 6;1
2
2
键分区
mysql
# 创建一张具有 10 个键分区的表
create table clients (
id int,
fname varchar(30),
lname varchar(30),
signed date
)
partition by linear key(signed)
partitions 10;
# 把键分区数量从 10 个变成 6 个
alter table clients coalesce partition 4;1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
区分 RANGE/LIST 拆分与 HASH/KEY 扩容
区分两套拆分语法
RANGE / LIST 拆分(精准拆分某段区间)
- 语法:REORGANIZE PARTITION 旧分区 INTO (多个新分区)
- 适用:把单个大区间拆成多个小区间,历史分区精细化拆分。
HASH / KEY 扩容(全局增加分区总数)
- 语法:ADD PARTITION PARTITIONS N
- 适用:整体增加分区数量,所有数据重新均匀打散。
关键避坑点:
- RANGE 不能直接在中间插入分区,必须 REORGANIZE 拆分原有分区;
- HASH/KEY 无法单独拆分某一个分区,只能全局增减分区总量;
- REORGANIZE、ADD PARTITION 都是 DDL,锁表,业务低峰执行;
- DROP PARTITION 是删除分区 + 删除数据,和拆分 / 合并完全无关。