Maison > Article > base de données > Comment supprimer efficacement des millions de lignes en double dans MySQL sans perturber les opérations normales ?
Optimisation de la suppression massive de lignes dans MySQL
Lorsque vous traitez des millions de lignes en double dans une table massive, une suppression efficace devient primordiale pour éviter de perturber la normale opérations de base de données. Cet article explore des approches alternatives pour minimiser les temps de verrouillage des tables et maintenir la disponibilité du site.
Option 1 : Suppression progressive
Plutôt que d'exécuter une seule requête de suppression exhaustive, cette méthode utilise une boucle pour effectuer de nombreuses opérations de suppression plus petites. Bien que cette approche résolve le verrouillage des tables, elle peut néanmoins augmenter considérablement la charge de la base de données et le temps d'exécution.
Option 2 : Renommer et restaurer
Renommer la table affectée, recréer une table vide un, puis renommer les tables après le nettoyage offre une solution moins intrusive. Cependant, ce processus implique plusieurs étapes et peut interrompre la fonctionnalité de création de rapports. Le processus de fusion de données peut également être difficile en fonction du type de données spécifique.
Solution optimale
Une technique alternative consiste à utiliser un script qui exécute la requête suivante dans un loop:
DELETE FROM `table` WHERE (whatever criteria) ORDER BY `id` LIMIT 1000
Cette requête supprime progressivement les lignes par lots de 1 000, évitant ainsi les verrous de table. En incluant une pause entre les itérations de la boucle, le script minimise la charge de la base de données. Les utilisateurs ne sont pas affectés et le nettoyage peut être programmé à un moment optimal.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!