mysql range 分区
mysql 四种分区类型
1.RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。
2.LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
3.HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
4.KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
注:无论是哪种 MySQL分区类型,要么分区表上没有主键/唯一键,要么分区表的主键/唯一键都必须包含分区键,也就是说不能使用主键/唯一键字段之外的其它字段分区。
RANGE 分区
1.一种是在建表时建立分区 另一种是在发现表数据很大再来建立分区表速度会很慢
实例: range 分区字段要为整数,我这里根据时间分区,unix_timastamp 时间转时间戳
mysql> ALTER TABLE posts PARTITION BY RANGE (unix_timestamp(post_at))( PARTITION p0 VALUES LESS THAN (1604188800), PARTITION p1 VALUES LESS THAN (1617235200), PARTITION p2 VALUES LESS THAN (1630454400), PARTITION p3 VALUES LESS THAN (1643673600), PARTITION p4 VALUES LESS THAN MAXVALUE );
后面时间你也可以使用 unix_timetamp('2020-01-01') 表示
最后记得 加上一个PARTITIAN 表名 VALUES LESS THAN MAXVALUE 将超过最后那个时间分区表的数据加入 最后的表,不然后面添加数据会报错