具体可见: http://blog.csdn.net/open_data/article/details/46893331
RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。
LIST 分区:类似于按 RANGE 分区,区别在于 LIST 分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH 分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含 MySQL 中有效的、产生非负整数值的任何表达式。
KEY 分区:类似于按 HASH 分区,区别在于 KEY 分区只支持计算一列或多列,且 MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率。
分区的一些优点包括:
具体可见:
http://blog.csdn.net/jesseyoung/article/details/35257527 https://www.cnblogs.com/zoro-zero/p/6511203.html
- show variables like' % event_schedule % ';
- set global event_scheduler = ON;
show processlist;
show events;
- drop event if exists event_second;
1), 创建表并初始化分区 (必须有初始化分区)
- DROP TABLE IF EXISTS `jmx_sta`;
- CREATE TABLE `jmx_sta` (
- `host` varchar(20) DEFAULT NULL COMMENT '主机',
- `time` TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00',
- `object` varchar(32) DEFAULT NULL COMMENT '对象',
- `attribute` varchar(32) DEFAULT NULL COMMENT '属性',
- `value` DOUBLE,
- PRIMARY KEY (`host`, `time`, `object`, `attribute`)
- ) ENGINE=InnoDB CHARSET=utf8
- PARTITION BY RANGE (unix_timestamp(time)) (
- PARTITION p20171231 VALUES LESS THAN (unix_timestamp('2017-12-31 23:59:59')),
- PARTITION p20180101 VALUES LESS THAN (unix_timestamp('2018-01-01 23:59:59')),
- PARTITION p20180102 VALUES LESS THAN (unix_timestamp('2018-01-02 23:59:59'))
- );
2), 添加存储过程
- DELIMITER $
- USE `nres`$
- DROP PROCEDURE IF EXISTS `create_Partition_jmx_status`$
- CREATE DEFINER=`iris`@`%` PROCEDURE `create_Partition_jmx_status`()
- BEGIN
- /* 事务回滚,其实放这里没什么作用,ALTER TABLE是隐式提交,回滚不了的。*/
- DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
- START TRANSACTION;
- /* 到系统表查出这个表的最大分区,得到最大分区的日期。在创建分区的时候,名称就以日期格式存放,方便后面维护 */
- SELECT REPLACE(partition_name,'p','') INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS
- WHERE table_name='jmx_sta' ORDER BY partition_ordinal_position DESC LIMIT 1;
- SET @Max_date= DATE(DATE_ADD(@P12_Name+0, INTERVAL 1 DAY))+0;
- /* 修改表,在最大分区的后面增加一个分区,时间范围加1天 */
- SET @s1=CONCAT('ALTER TABLE jmx_sta ADD PARTITION (PARTITION p',@Max_date,' VALUES LESS THAN (TO_DAYS (''',DATE(@Max_date),''')))');
- /* 输出查看增加分区语句*/
- SELECT @s1;
- PREPARE stmt2 FROM @s1;
- EXECUTE stmt2;
- DEALLOCATE PREPARE stmt2;
- /* 取出最小的分区的名称,并删除掉 。
- 注意:删除分区会同时删除分区内的数据,慎重 */
- /*select partition_name into @P0_Name from INFORMATION_SCHEMA.PARTITIONS
- where table_name='tb_3a_huandan_detail' order by partition_ordinal_position limit 1;
- SET @s=concat('ALTER TABLE tb_3a_huandan_detail DROP PARTITION ',@P0_Name);
- PREPARE stmt1 FROM @s;
- EXECUTE stmt1;
- DEALLOCATE PREPARE stmt1; */
- /* 提交 */
- COMMIT ;
- END$
- DELIMITER ;
3, 添加定时事件
- DELIMITER ||
- CREATE EVENT Partition_jmx_sta_perday
- ON SCHEDULE
- EVERY 1 day STARTS '2018-01-02 23:59:50'
- DO
- BEGIN
- CALL iris.`create_Partition_jmx_status`;
- END ||
- DELIMITER ;
来源: http://www.bubuko.com/infodetail-2448403.html