mysql 分区 扩充_MySQL 每天自动增加分区

针对tb_3a_huandan_detail表中每天新增的300W数据导致查询性能下降的问题,采用MySQL的分区策略提高查询效率。通过定时任务每天自动执行,根据ServiceStartTime字段的日期范围创建新的分区,例如p20160523至p20160527。存储过程create_Partition_3Ahuandan用于动态添加分区,事件Partition_3Ahuandan_event确保每天定时执行分区扩展。
摘要由CSDN通过智能技术生成

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

ALTER TABLE tb_3a_huandan_detail PARTITION BY RANGE (TO_DAYS(ServiceStartTime))

(

PARTITION p20160523 VALUES LESS THAN (TO_DAYS('2016-05-23')),

PARTITION p20160524 VALUES LESS THAN (TO_DAYS('2016-05-24')),

PARTITION p20160525 VALUES LESS THAN (TO_DAYS('2016-05-25')),

PARTITION p20160526 VALUES LESS THAN (TO_DAYS('2016-05-26')),

PARTITION p20160527 VALUES LESS THAN (TO_DAYS('2016-05-27'))

)

分区存储过程

DELIMITER $$

USE `nres`$$

DROP PROCEDURE IF EXISTS `create_Partition_3Ahuadan`$$

CREATE DEFINER=`nres`@`%` PROCEDURE `create_Partition_3Ahuadan`()

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='tb_3a_huandan_detail' 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 tb_3a_huandan_detail 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 ;

每每日定时任务

DELIMITER ||

CREATE EVENT Partition_3Ahuadan_event

ON SCHEDULE

EVERY 1 day STARTS '2016-05-27 23:59:59'

DO

BEGIN

CALL nres.`create_Partition_3Ahuadan`;

END ||

DELIMITER ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值