Maison >base de données >tutoriel mysql >Comment supprimer efficacement les lignes en double d'une grande table SQL ?
Suppression efficace des lignes en double des grandes tables SQL
L'ajout d'une contrainte unique à une grande table (des millions de lignes) nécessite une gestion minutieuse des entrées en double. La suppression directe des doublons avec une requête SQL standard peut être extrêmement lente et gourmande en ressources.
Une méthode simple consiste à sauvegarder la table, à ajouter la contrainte unique, puis à restaurer la table à partir de la sauvegarde. Cela garantit que seules les lignes uniques sont conservées.
Cependant, une approche plus raffinée optimise le processus de suppression à l'aide d'une requête SQL concise :
<code class="language-sql">DELETE FROM table USING table AS alias WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND table.max_field < alias.max_field;</code>
Cette requête supprime efficacement les doublons en comparant les lignes basées sur field1
et field2
. Il conserve la ligne avec la valeur max_field
la plus élevée, éliminant ainsi les doublons de valeur inférieure. Par exemple :
<code class="language-sql">DELETE FROM user_accounts USING user_accounts AS ua2 WHERE user_accounts.email = ua2.email AND user_accounts.id < ua2.id;</code>
Cet exemple supprime les adresses e-mail en double, en préservant le compte avec le id
le plus élevé (vraisemblablement le plus récemment créé).
Remarque importante : La clause USING
, qui améliore considérablement l'efficacité des requêtes en permettant la comparaison directe des lignes, est une fonctionnalité spécifique à PostgreSQL. Des méthodes alternatives peuvent être nécessaires pour d'autres systèmes de bases de données.
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!