mysql 表分区的几种方式:
- RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。
- LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
- HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。
- KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
常用的按时间分区可以按照年、月、日等条件用来分区,因为是按时间条件分区所以选用RANGE分区方式。
分区的切条件判断:
- LESS THAN:如果是数值就是小于等于,时间则是小于。
- LESS THAN MAX:不等于。
- IN:包含于某某区间。
按实际分区的时间函数选用:
按日分区切分时的条件可以用day()、to_days()时间函数,需要注意的是必须是返回值是整形的。
按月分区采用month()时间函数;
其他条件分区时间函数可到我关于时间函数的博文查看:https://blog.csdn.net/qq_36216193/article/details/90404527
其中按时间字段create_date按天分区,首先需要把date字段改成主键,后添加分区切分规则
ALTER TABLE js_sys_log DROP PRIMARY KEY, ADD PRIMARY KEY (id, create_date); --之前id是主键,所以这里第2主键为联合主键 ALTER TABLE js_sys_log ADD PRIMARY KEY (create_date);
为了便于管理分区名通常以“p时间”来命名。
示例一: ALTER TABLE js_sys_log PARTITION BY RANGE (to_days(create_date)) ( PARTITION p20181101 VALUES LESS THAN (to_days('20181101')), PARTITION p20181102 VALUES LESS THAN (to_days('20181102')), PARTITION p20181103 VALUES LESS THAN (to_days('20181103')), PARTITION p20181104 VALUES LESS THAN (to_days('20181104')), PARTITION p20181105 VALUES LESS THAN (to_days('20181105')), PARTITION p20181106 VALUES LESS THAN (to_days('20181106')), PARTITION p20181107 VALUES LESS THAN (to_days('20181107')), PARTITION p20181108 VALUES LESS THAN (to_days('20181108')), PARTITION p20181109 VALUES LESS THAN (to_days('20181109')), PARTITION p20181110 VALUES LESS THAN (to_days('20181110')), PARTITION p_other VALUES LESS THAN MAXVALUE ); );
后期添加分区:
示例二: ALTER TABLE js_sys_log ADD PARTITION (PARTITION p20181111 VALUES LESS THAN (TO_DAYS ('2018-11-11')));
删除分区:
示例三: ALTER TABLE js_sys_log DROP PARTITION p20181101;
查询MySQL的系统字典库得知所有的分区详情信息
示例四: SELECT * FROM information_schema. PARTITIONS t WHERE t.PARTITION_NAME IS NOT NULL
在分区创建后可以通过过程和事件控制自动增加表分区。
(未完,待更新。。。)
文章来源: https://blog.csdn.net/qq_36216193/article/details/90412637