Il modo più efficiente per farlo è utilizzare una vista. Eh? Che cosa ha a che fare con il problema? Bene, non eseguire l'eliminazione 10 minuti dopo i reparti. Crea invece una vista con la seguente logica:
create view v_recoveries as
select r.*
from recoveries r
where expiry > date_sub(now(), interval 10 minutes);
Per le prestazioni, desideri un indice su recoveries(expiry)
, quindi dovrebbe essere veloce.
Quindi, a tuo piacimento, una volta per data, una volta all'ora o una volta alla settimana, elimina i record non necessari con:
DELETE FROM `recoveries`
WHERE `expiry` <= date_sub(now(), interval 10 minutes);
Questo approccio ha diversi vantaggi:
- La presenza dei dati è esattamente di 10 minuti, piuttosto che in base alla programmazione di qualche lavoro.
- Le eliminazioni effettive possono avvenire quando il sistema è inattivo.
- Se un processo cron non viene eseguito, i dati non sono "corrotti", ovvero non si ottengono dati troppo vecchi.
- Se il sistema è occupato (molti inserimenti), gli inserimenti non competono con le eliminazioni, rallentando ulteriormente il sistema.