mysql定期削除サブテーブル

1364 ワード

データテーブルのデータ量が大きすぎるため、毎日定時に分表の記憶過程を実行し、時間が長くなると分表の数が多すぎて、定期的に分表を削除する必要がある.
CREATE  PROCEDURE `sp_droptables`()
begin
	declare t_name varchar(64) ;
            declare isFinished int default false;
            declare log_table_list cursor for (select table_name from INFORMATION_SCHEMA.TABLES  where TABLE_SCHEMA='  ' and TABLE_NAME like 'table_%') ;
            declare continue handler for not found set isFinished=true; 
            open log_table_list;
            repeat 
                fetch log_table_list into t_name; 
                if isFinished = false then
                    if datediff(now(),DATE_FORMAT(replace(t_name,'table_',''),'%Y-%m-%d') )>30 										then
                        set @sqltext=concat('drop table ',t_name,';');
                        PREPARE drop_table from @sqltext;
                        execute drop_table ; 
                    end if;
                end if;
                until isFinished 
            end repeat; 
            close log_table_list;
end

ストレージ・プロシージャを作成し、このストレージ・プロシージャを毎日タイミングよく実行すればよい
DROP EVENT IF EXISTS `E_DROPTABLES`;
CREATE  EVENT `E_DROPTABLES`
ON SCHEDULE
EVERY '1' DAY STARTS '2019-12-26 03:00:00'
ON COMPLETION PRESERVE
DO BEGIN
CALL sp_droptables;
END