Mysql
 sql >> Base de données >  >> RDS >> Mysql

Méthode la plus efficace pour faire expirer les enregistrements 10 minutes après la création

La manière la plus efficace de le faire est d'utiliser une vue. Hein? Qu'est-ce que cela a à voir avec le problème? Eh bien, ne faites pas la suppression 10 minutes après les salles. Créez plutôt une vue avec la logique suivante :

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

Pour les performances, vous voulez un index sur les recoveries(expiry) , cela devrait donc être rapide.

Ensuite, à votre guise - une fois par date, une fois par heure ou une fois par semaine - supprimez les enregistrements inutiles avec :

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

Cette approche présente plusieurs avantages :

  • La présence de données dure exactement 10 minutes, plutôt que d'être basée sur la planification d'une tâche.
  • Les suppressions réelles peuvent avoir lieu lorsque le système est inactif.
  • Si une tâche cron ne s'exécute pas, les données ne sont pas "corrompues", c'est-à-dire que vous n'obtenez pas de données trop anciennes.
  • Si le système est occupé (beaucoup d'insertions), les insertions ne sont pas en concurrence avec les suppressions, ce qui ralentit davantage le système.