0

我有一个数据库,其中各种表中的大约 8 个字段是日期,需要每天检查它们是否即将过期或已经过期。

我想使用 CRON 作业来实现这一点,但请记住,数据库最终可能会有 50,000 行更多。运行检查所有日期的脚本很可能会超时。

我正在考虑将搜索脚本分割成块。所以它将运行几千行然后停止。然后五分钟后,通过查询数据库中存储上次完成位置的字段,从它离开的地方拿起。一旦它遍历所有行就停止。

但我不知道这是否明智,甚至可能让脚本在 5 分钟内再次运行。

任何意见,将不胜感激。

4

2 回答 2

1

您不必遍历整个表。您可以为此运行查询吗?

SELECT something FROM tbl_name WHERE NOW() >= date_col;
于 2012-07-07T13:09:58.190 回答
0

使用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 ;

文档:
创建事件
开始...结束

于 2012-07-07T13:22:22.533 回答