MySQL8.0中的表分区
MySQL支持HASH分区、RANGE分区、LIST分区、KEY分区。 Hash分区:对用户定义的表达式所返回的值来进行分区。可以写partitions (分区数目),或直接使用分区语句,比如partition p0 values in…..。 Range分区:是对一个连续性的行值,按范围进行分区;比如:id小于100;id大于100小于200; List分区:跟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 点击数:2649 发布时间:2021-04-22 00:09:09 更新时间:2021-04-22 00:09:58
正在加载评论...