Nous avons une table mysql qui à tout moment compte environ 12 millions de lignes. Nous devons supprimer les anciennes données pour garder la taille de la table quelque peu gérable.
À l'heure actuelle, nous exécutons cette requête quotidiennement, à minuit, à l'aide d'un travail cron:
DELETE FROM table WHERE endTime < '1393632001'
La dernière fois que la requête a été exécutée, elle a examiné 4 602 400, a pris plus de 3 minutes et le processeur a traversé le toit.
Que pouvons-nous faire pour empêcher le processeur, les connexions synchrones de la base de données, la profondeur des repères de disque, etc. de monter de façon déraisonnable tout en effaçant les anciennes données?
PS: Vous remarquerez que la requête se produit en fait à un moment assez inopportun de notre cycle d'utilisation. Supposons que nous ayons déjà décalé le timing de la requête pour qu'elle se produise au point d'utilisation le plus bas chaque jour. De plus, il n'y a pas d'index sur "endTime" et je préférerais le garder de cette façon si possible car il y a une tonne de données insérées très régulièrement, et pas beaucoup de recherche.