MySQL : Supprimez rapidement les doublons d'une base de données massive
Les rencontres avec de vastes bases de données MySQL entachées d'entrées en double exigent une résolution rapide, en particulier dans les scénarios où le temps est essentiel. En raison des inquiétudes concernant le temps d'exécution des requêtes, l'une de ces bases de données, comprenant plus d'un million de lignes, a été criblée de doublons, occupant potentiellement jusqu'à la moitié de sa capacité de stockage.
L'objectif est de nettoyer rapidement la base de données, en identifiant les éléments uniques. combinaisons de "text1" et "text2", tout en préservant un seul enregistrement avec une valeur "text3" non nulle pour chaque combinaison unique. Ce processus évite la perte de données et garantit leur intégrité.
Les approches conventionnelles telles que DISTINCT et GROUP BY, bien qu'efficaces sur des bases de données plus petites, se sont révélées inadéquates, les temps d'exécution des requêtes dépassant le seuil de 20 minutes. Par conséquent, la recherche d'une solution plus efficace est lancée.
L'une de ces solutions, exploitant la puissance combinée de "ON DUPLICATE KEY" et "IFNULL()", offre des performances exceptionnelles :
CREATE TABLE tmp LIKE yourtable; ALTER TABLE tmp ADD UNIQUE (text1, text2); INSERT INTO tmp SELECT * FROM yourtable ON DUPLICATE KEY UPDATE text3=IFNULL(text3, VALUES(text3)); RENAME TABLE yourtable TO deleteme, tmp TO yourtable; DROP TABLE deleteme;
Cette approche excelle en évitant les opérations gourmandes en ressources telles que GROUP BY et DISTINCT. Il contourne également les problèmes de performances associés au tri des fichiers, un obstacle majeur pour les grandes tables temporaires. Bien qu'une analyse complète de la table d'origine reste inévitable, cette solution optimisée constitue l'approche la plus efficace pour supprimer les doublons pour les bases de données volumineuses.
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!