Най-ефективният начин да направите това е да използвате изглед. а? Какво общо има това с проблема? Е, не правете изтриването 10 минути след отдели. Вместо това създайте изглед със следната логика:
create view v_recoveries as
select r.*
from recoveries r
where expiry > date_sub(now(), interval 10 minutes);
За производителност искате индекс за recoveries(expiry)
, така че това трябва да е бързо.
След това, в свободното си време – веднъж на дата, или веднъж на час, или веднъж седмично – изтрийте ненужните записи с:
DELETE FROM `recoveries`
WHERE `expiry` <= date_sub(now(), interval 10 minutes);
Този подход има няколко предимства:
- Наличието на данни е точно 10 минути, а не въз основа на планирането на някаква работа.
- Реалните изтривания могат да се осъществят, когато системата е в покой.
- Ако задание на cron не се изпълни, данните не са „повредени“ – тоест не получавате твърде стари данни.
- Ако системата е заета (много вмъквания), тогава вмъкванията не се конкурират с изтриванията, което допълнително забавя работата на системата.