4

PHP と MySQL にエントリが挿入されてから 24 時間後に有効期限が切れるテーブルを作成したいと考えています。

理想的には、ユーザーがサーバーとやり取りするたびに、古いエントリを削除する「削除プロセス」を実行したいと考えています。これはより頻繁に行われるため、大量のデータを削除する必要はなく、数ミリ秒しかかからないはずです。

各エントリに日付/時刻の付加価値を与えました。

どうすればいいですか?

4

3 に答える 3

12

次のいずれかの MySQL のイベント スケジューラを使用できます。

  • 有効期限が切れたときにそのようなレコードを自動的に削除するには:

    CREATE EVENT delete_expired_101
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 24 HOUR DO
    DELETE FROM my_table WHERE id = 101;
    
  • 期限切れのすべてのレコードの自動パージを定期的に実行するには:

    CREATE EVENT delete_all_expired
    ON SCHEDULE EVERY HOUR DO
    DELETE FROM my_table WHERE expiry < NOW();
    
于 2012-09-13T16:37:27.517 に答える
2
  1. ユーザーが対話するときに削除プロセスを実行しないでください。それは物事を遅くします。cronjobを使用する必要があります(毎分/時間)
  2. 追加されたタイムスタンプ値にインデックスを付けてから実行する必要がありますDELETE FROM table WHERE added < FROM_UNIXTIME(UNIX_TIMESTAMP()-24*60*60)
  3. テーブルを異なるテーブルに分割するPartitionsをチェックアウトしたいかもしれませんが、1 つのテーブルとして動作します。利点は、エントリを削除する必要がなく、日ごとに個別のテーブルがあることです。
  4. 多くのデータがテーブルの速度を低下させるとあなたは考えていると思います。( MySQL マニュアル) を使用し、インデックスを使用して SELECT クエリを最適化する必要があるかもしれませんEXPLAIN( MySQL マニュアル)
  5. UPDATE egyalの答えをチェックしてください- これは一見の価値がある別のアプローチです。
于 2012-09-13T16:33:13.603 に答える
0

Cron ジョブを使用して調べることができます

これは役に立ちます

時間が経過したら MySQL 行を削除する

于 2012-09-13T16:31:02.150 に答える