2012-07-07 46 views
0

我有一个数据库,每个表中大约8个字段是日期,如果他们即将或过期,需要每天检查这些日期。Cron检查大型MySQL数据库中的日期

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

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

但我不知道这是明智的甚至可能的脚本设置为在5分钟内再次运行。

任何意见,将不胜感激。

+3

但是......这是一个数据库!你为什么要逐行检查?您可以编写一个返回所有过期行的查询。如果这是一个问题,也许可以在日期列中添加一个索引。 – cha0site 2012-07-07 13:09:22

回答

1

您不必跑完整个表格。你可以运行一个查询的权利?

SELECT something FROM tbl_name WHERE NOW() >= date_col; 
0

使用mysql event scheduler来做到这一点。
此代码将创建一个自动执行每日一次,从您的表中删除过时的记录一个事件:

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 ; 

文档:
CREATE EVENT
BEGIN...END