mysql按月归档日志表

由于日志表越来越大,数据将近1亿,查数据非常慢,因此使用事件每月28日调用存储过程自动创建归档表,将上月数据按照create_time字段和id字段插入归档表并删除原表相应数据。

DELIMITER ;;
    CREATE DEFINER=`root`@`localhost` PROCEDURE `clear_log`()
    BEGIN
    		#获取当上月的表名
    		SET @currentym =left(DATE_SUB(CURRENT_DATE,INTERVAL 1 MONTH),7);
    		SET @logTable=CONCAT('log_',left(@currentym,4),right(@currentym,2));
    		#判断是否需要建表,没有则创建
    		SET @STMT :=CONCAT("CREATE TABLE IF NOT EXISTS ",@logTable," LIKE log;");
    		PREPARE STMT FROM @STMT;   
    		EXECUTE STMT;
    		#日志迁移
    		SET @dateOne=concat(left(DATE_SUB(CURRENT_DATE,INTERVAL 1 MONTH),7),"-01");
        SET @datemonthone=concat(left(CURDATE(),8),"01");
    		SET @STMT :=CONCAT("insert into ",@logTable," select * from log WHERE create_time>'",@dateOne,"' and create_time<'",@datemonthone,"' order by id;");
    		PREPARE STMT FROM @STMT;   
    		EXECUTE STMT;
    		#删除log表中对应数据
    		delete from log WHERE create_time>@dateOne and create_time<@datemonthone order by id;
    END
    ;;
    DELIMITER ;


DELIMITER ;;
CREATE DEFINER=`root`@`localhost` EVENT `schedule_clear_log` ON SCHEDULE EVERY 1 MONTH STARTS '2019-04-28 22:30:00' ON COMPLETION NOT PRESERVE ENABLE DO CALL clear_log()
;;
DELIMITER ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值