Mysql
 sql >> Database >  >> RDS >> Mysql

Il metodo più efficiente per far scadere i record dopo 10 minuti dalla creazione

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.