我有一个 MYSQL 表,它只需要今天日期前 30 天的数据。它的数据可能是今天日期之后的几年。为了更快地查询,我通常删除旧记录,因为我认为没有必要搜索旧记录。但是,如果我们需要它进行分析,我仍然会保留记录的备份副本。原表是这样的:
CREATE TABLE featured_deal (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
fsa VARCHAR(10),
poster_id int(11),
dealid bigint(20),
bookedDate date,
createDate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `featured_unique`(fsa, bookedDate)
)
我创建了一个表,它是该表的副本,称为历史:
CREATE TABLE featured_deal_history (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
fsa VARCHAR(10),
poster_id int(11),
dealid bigint(20),
bookedDate date,
createDate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `featured_unique`(fsa, bookedDate)
)
每当在原始表上发生插入时,我都有一个触发器来填充历史表:
CREATE TRIGGER `featured_to_history`
AFTER INSERT ON lst_enmasse_featured_deal
FOR EACH ROW
INSERT INTO lst_enmasse_featured_deal_history (fsa,poster_id,dealid,bookedDate,createDate)
VALUES (NEW.fsa,NEW.poster_id,NEW.dealid,NEW.bookedDate,NEW.createDate)
最后,我使用 cron 作业和命令清理表:
DELETE * FROM featured_deal WHERE bookedDate < DATE_SUB(CURDATE(), INTERVAL 30 DAY)
有没有更好的方法来执行上述任务?我想到了 MYSQL 分区。但是,我没有固定的分区。日期会发生变化,因此我每天都需要两个新分区。