2012-07-07 35 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