MySQL每天自动增加分区

Posted Yes,I do

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL每天自动增加分区相关的知识,希望对你有一定的参考价值。

有一个表tb_3a_huandan_detail,每天有300W左右的数据。查询太慢了,网上了解了一下,可以做表分区。由于数据较大,所以决定做定时任务每天执行存过自动进行分区。

1、在进行自动增加分区前一定得先对表手动分几个区

1 ALTER TABLE tb_3a_huandan_detail PARTITION BY RANGE (TO_DAYS(ServiceStartTime))
2 (
3     PARTITION p20160523 VALUES LESS THAN (TO_DAYS(2016-05-23)),
4     PARTITION p20160524 VALUES LESS THAN (TO_DAYS(2016-05-24)),
5     PARTITION p20160525 VALUES LESS THAN (TO_DAYS(2016-05-25)),
6     PARTITION p20160526 VALUES LESS THAN (TO_DAYS(2016-05-26)),
7     PARTITION p20160527 VALUES LESS THAN (TO_DAYS(2016-05-27))
8 )

2、分区存过如下:

 1 DELIMITER $$
 2 
 3 USE `nres`$$
 4 
 5 DROP PROCEDURE IF EXISTS `create_Partition_3Ahuadan`$$
 6 
 7 CREATE DEFINER=`nres`@`%` PROCEDURE `create_Partition_3Ahuadan`()
 8 BEGIN
 9 /* 事务回滚,其实放这里没什么作用,ALTER TABLE是隐式提交,回滚不了的。*/
10     DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
11     START TRANSACTION;
12  
13 /* 到系统表查出这个表的最大分区,得到最大分区的日期。在创建分区的时候,名称就以日期格式存放,方便后面维护 */
14     SELECT REPLACE(partition_name,p,‘‘) INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS 
15     WHERE table_name=tb_3a_huandan_detail ORDER BY partition_ordinal_position DESC LIMIT 1;
16      SET @Max_date= DATE(DATE_ADD(@P12_Name+0, INTERVAL 1 DAY))+0;
17 /* 修改表,在最大分区的后面增加一个分区,时间范围加1天 */
18     SET @s1=CONCAT(ALTER TABLE tb_3a_huandan_detail ADD PARTITION (PARTITION p,@Max_date, VALUES LESS THAN (TO_DAYS (‘‘‘,DATE(@Max_date),‘‘‘))));
19     /* 输出查看增加分区语句*/
20     SELECT @s1;
21     PREPARE stmt2 FROM @s1;
22     EXECUTE stmt2;
23     DEALLOCATE PREPARE stmt2;
24 /* 取出最小的分区的名称,并删除掉 。
25     注意:删除分区会同时删除分区内的数据,慎重 */
26     /*select partition_name into @P0_Name from INFORMATION_SCHEMA.PARTITIONS 
27     where table_name=‘tb_3a_huandan_detail‘ order by partition_ordinal_position limit 1;
28     SET @s=concat(‘ALTER TABLE tb_3a_huandan_detail DROP PARTITION ‘,@P0_Name);
29     PREPARE stmt1 FROM @s; 
30     EXECUTE stmt1; 
31     DEALLOCATE PREPARE stmt1; */
32 /* 提交 */
33     COMMIT ;
34  END$$
35 
36 DELIMITER ;

3、增加定时事件

 1 DELIMITER ||  
 2 CREATE EVENT Partition_3Ahuadan_event  
 3           ON SCHEDULE  
 4           EVERY 15 day STARTS 2016-05-27 23:59:59   
 5           DO  
 6       BEGIN  
 7 
 8           CALL nres.`create_Partition_3Ahuadan`;  
 9         
10  END ||  
11 DELIMITER ;  

 

参考:

http://blog.csdn.net/m582445672/article/details/7670743

http://blog.chinaunix.net/uid-24086995-id-127389.html

 

以上是关于MySQL每天自动增加分区的主要内容,如果未能解决你的问题,请参考以下文章

mysql 多分区,自动化分区脚本

mysql 多分区,自动化分区脚本

mysql在已有无分区表增加分区

MySQL 表数据分区,每10000条数据自动分区

ORACLE自动创建分区

创建,增加,删除mysql表分区