これを行う最も効率的な方法は、ビューを使用することです。は?それは問題と何の関係がありますか?ええと、病棟の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ジョブの実行に失敗しても、データは「破損」していません。つまり、古すぎるデータは取得されません。
- システムがビジー状態(挿入が多い)の場合、挿入は削除と競合していないため、システムの速度がさらに低下します。