sql >> Base de Datos >  >> RDS >> Mysql

Método más eficiente para caducar registros después de 10 minutos desde la creación

La forma más eficiente de hacer esto es usar una vista. ¿Eh? ¿Qué tiene que ver eso con el problema? Bueno, no hagas la eliminación 10 minutos después de las salas. En su lugar, cree una vista con la siguiente lógica:

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

Para el rendimiento, desea un índice en recoveries(expiry) , así que esto debería ser rápido.

Luego, cuando lo desee, una vez por fecha, una vez por hora o una vez por semana, elimine los registros innecesarios con:

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

Este enfoque tiene varias ventajas:

  • La presencia de datos es exactamente 10 minutos, en lugar de basarse en la programación de algún trabajo.
  • Las eliminaciones reales pueden tener lugar cuando el sistema está inactivo.
  • Si un trabajo cron no se ejecuta, los datos no están "corrompidos", es decir, no obtiene datos demasiado antiguos.
  • Si el sistema está ocupado (muchas inserciones), entonces las inserciones no compiten con las eliminaciones, lo que ralentiza aún más el sistema.