MySQL8.0中的表分区

MySQL支持HASH分区、RANGE分区、LIST分区、KEY分区。
Hash分区:对用户定义的表达式所返回的值来进行分区。可以写partitions (分区数目),或直接使用分区语句,比如partition p0 values in…..Range分区:是对一个连续性的行值,按范围进行分区;比如:id小于100id大于100小于200List分区:跟range分区类似,不过它存放的是一个离散值的集合。
Key分区:与hash分区类似,只不过分区支持一列或多列,并且MySQL服务器自身提供hash函数。 如果表存在主键或者唯一索引时,分区列必须是唯一索引的一个组成部分。
HASH分区 MYSQL支持两种HASH分区,常规HASH(HASH)和线性HASH(LINEAR HASH) 。 常规HASH是基于分区个数的取模(%)运算,根据余数插入到指定的分区。线性HASH暂不介绍。

        
分区的创建
HASH分区
HASH 分区只支持数字分区。
允许使用用户自定义的表达式进行分区。
CREATE TABLE (c1 INT, c2 VARCHAR(50), c3 DATE) PARTITION BY HASH(YEAR(c3)) PARTITIONS 3;

KEY分区
KEY 分区支持除 text BLOB 之外的所有数据类型的分区。
分区数目最好为质数,这样可以使数据平均分到每个分区。
不允许使用用户自定义的表达式进行分区。
其使用系统提供的 HASH 函数进行分区。
如果表存在主键或者唯一索引时,分区列必须是唯一索引的一个组成部分。
CREATE TABLE (c1 INT, c2 VARCHAR(50), c3 DATE) PARTITION BY KEY(c2) PARTITIONS 3;

演示数据插入
INSERT INTO t1 (`c1`, `c2`, `c3`) VALUES ('5', '1a4', '2021-01-01');
INSERT INTO t1 (`c1`, `c2`, `c3`) VALUES ('6', '2a5', '2022-01-01');
INSERT INTO t1 (`c1`, `c2`, `c3`) VALUES ('7', '3a6', '2023-01-01');
INSERT INTO t1 (`c1`, `c2`, `c3`) VALUES ('8', '4a7', '2024-01-01');
INSERT INTO t1 (`c1`, `c2`, `c3`) VALUES ('9', '5a8', '2025-01-01');

分区数据查看(分区名字默认是p0,p1,p2依次往后排列)
SELECT * FROM t1 PARTITION(p0);
SELECT * FROM t1 PARTITION(p1);
SELECT * FROM t1 PARTITION(p2);

分区的调整
增加分区(增加后数据也会重新排列)
ALTER TABLE ADD PARTITION PARTITIONS 3;
删除分区(删除后,该表就失去分区属性了,不能再增加分区了)
注意: 使用remove移除分区是仅仅移除分区的定义,并不会删除数据和drop PARTITION不一样,后者会连同数据一起删除移除分区后, 分区文件会被移除, 合并到一个文件里面去。
ALTER TABLE REMOVE PARTITIONING;
发布者:songJian   点击数:1213   发布时间:2021-04-21 16:09:09   更新时间:2021-04-21 16:09:58
正在加载评论...
相关文章