1

MySQL データベース用にいくつかのテーブルを作成しています。これらのテーブルには、数週間しか必要としないエントリがあります。

例えば:

create table LoginAttempts (
ReferenceId int unsigned auto_increment not null,
UserId smallint unsigned not null,
EventTime timestamp not null...)

ユーザーのログイン試行の記録を永遠に保持する必要がなくなったので、たとえば 30 日後にそれらを削除する予定です。明らかに、この操作が自動的に行われる必要があります。私の最初の考えは、テーブルにエントリが作成されるたびに実行されるトリガーをこのテーブルに追加することでした。基本的に、各行のタイムスタンプを現在のタイムスタンプと単純に比較します。30 日以上経過している場合、その行は削除されます。

ただし、私の懸念は、パフォーマンスへの影響の可能性です。この方法は、少なくとも私には非効率的です。もっと良い方法があるはずです。では、やりたいことをより良い方法で実装するにはどうすればよいでしょうか?

4

1 に答える 1

2

そのためには、cron ジョブまたはMySql イベントを使用します。

mysql イベントを使用する場合は、次のようなイベントを作成します

CREATE EVENT event_name
ON SCHEDULE EVERY 1 DAY
DO
   DELETE 
     FROM LoginAttempts 
    WHERE DATEDIFF(CURDATE(), DATE(EventTime)) > 30;

SHOW PROCESSLISTイベント スケジューラが有効になっているかどうかを確認するために使用します。ON の場合Daemon、ユーザー " " によるプロセス " " が表示されますevent_schedulerSET GLOBAL event_scheduler = ON;現在有効になっていない場合に、スケジューラを有効にするために使用します。イベント スケジューラの設定の詳細はこちら

于 2013-06-09T07:22:37.747 に答える