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 将超过最后那个时间分区表的数据加入 最后的表,不然后面添加数据会报错

 

posted @ 2021-03-20 11:27  时间掉飞机  阅读(324)  评论(0编辑  收藏  举报