sql >> データベース >  >> RDS >> Mysql

作成から10分後にレコードを期限切れにする最も効率的な方法

    これを行う最も効率的な方法は、ビューを使用することです。は?それは問題と何の関係がありますか?ええと、病棟の10分後に削除をしないでください。代わりに、次のロジックでビューを作成します。

    create view v_recoveries as
        select r.*
        from recoveries r
        where expiry > date_sub(now(), interval 10 minutes);
    

    パフォーマンスのために、recoveries(expiry)のインデックスが必要です 、したがって、これは高速である必要があります。

    次に、暇なときに、日付ごとに1回、1時間ごとに1回、または1週間に1回、次のコマンドを使用して不要なレコードを削除します。

    DELETE FROM `recoveries`
        WHERE `expiry` <= date_sub(now(), interval 10 minutes);
    

    このアプローチにはいくつかの利点があります。

    • データの存在は、一部のジョブのスケジュールに基づくのではなく、正確に10分です。
    • 実際の削除は、システムが休止しているときに実行できます。
    • cronジョブの実行に失敗しても、データは「破損」していません。つまり、古すぎるデータは取得されません。
    • システムがビジー状態(挿入が多い)の場合、挿入は削除と競合していないため、システムの速度がさらに低下します。


    1. SqoopImport--password-file関数がsqoop1.4.4で正しく機能しない

    2. MySQL-2つのフィールドをCONCATし、WHERE句で使用します

    3. T-SQL(SQL Server)で重複キーエラーを無視する方法

    4. SQL Server(T-SQL)で高度なサーバー構成オプションを表示する