0

さまざまなテーブルの約8つのフィールドが日付であるデータベースがあり、これらは、期限切れが近づいているか、すでに期限切れになっているかどうかを毎日チェックする必要があります。

これを実現するためにCRONジョブを使用したいのですが、データベースには最終的に50,000行以上になる可能性があることを念頭に置いてください。すべての日付をチェックするスクリプトを実行すると、タイムアウトになる可能性があります。

検索スクリプトをチャンクに分割することを考えていました。したがって、数千行実行されてから停止します。次に、5分後に、最後に終了した場所を格納するデータベース内のフィールドにクエリを実行して、終了した場所からピックアップします。そして、すべての行を繰り返し処理すると停止します。

しかし、これが賢明であるか、スクリプトが5分後に再び実行されるように設定することが可能であるかどうかはわかりません。

何かアドバイスをいただければ幸いです。

4

2 に答える 2

1

テーブル全体を実行する必要はありません。その権利のクエリを実行できますか?

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

これを行うには、 mysqlイベントスケジューラを使用します。
このコードは、テーブルから古いレコードを削除するために1日1回自動的に実行されるイベントを作成します。

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

于 2012-07-07T13:22:22.533 に答える