我有一个数据库,其中各种表中的大约 8 个字段是日期,需要每天检查它们是否即将过期或已经过期。
我想使用 CRON 作业来实现这一点,但请记住,数据库最终可能会有 50,000 行更多。运行检查所有日期的脚本很可能会超时。
我正在考虑将搜索脚本分割成块。所以它将运行几千行然后停止。然后五分钟后,通过查询数据库中存储上次完成位置的字段,从它离开的地方拿起。一旦它遍历所有行就停止。
但我不知道这是否明智,甚至可能让脚本在 5 分钟内再次运行。
任何意见,将不胜感激。
您不必遍历整个表。您可以为此运行查询吗?
SELECT something FROM tbl_name WHERE NOW() >= date_col;
使用mysql 事件调度程序来做到这一点。
此代码将创建一个事件,该事件将每天自动执行一次,以从您的表中删除过时的记录:
DELIMITER //
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
ON COMPLETION PRESERVE
DO BEGIN
DELETE FROM mytable WHERE col1<NOW();
DELETE FROM mytable WHERE col2<NOW();
DELETE FROM mytable WHERE col3<NOW();
DELETE FROM mytable WHERE col4<NOW();
DELETE FROM mytable WHERE col5<NOW();
DELETE FROM mytable WHERE col6<NOW();
DELETE FROM mytable WHERE col7<NOW();
DELETE FROM mytable WHERE col8<NOW();
END//
DELIMITER ;