Maison >base de données >tutoriel mysql >Comment puis-je supprimer efficacement les lignes en double d'une grande table avec une contrainte unique dans PostgreSQL ?
Supprimer efficacement les doublons d'une grande table avec une contrainte unique dans PostgreSQL
L'ajout d'une contrainte unique à une grande table (des millions de lignes) contenant des doublons présente un défi important en raison de la nature chronophage des DELETE
instructions SQL standard. Cet article explore une solution plus efficace.
Une méthode très efficace exploite une extension PostgreSQL et la clause USING
. Considérez cette requête :
<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 intelligemment les lignes en double. Il identifie les doublons en fonction de field1
et field2
et conserve la ligne avec la valeur max_field
la plus élevée, en supprimant celles avec des valeurs inférieures.
Par exemple, pour appliquer l'unicité à la colonne email
d'une table user_accounts
, en conservant le compte le plus récemment créé (le plus élevé id
), la requête serait :
<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>
La clause USING
est la clé de l'efficacité de cette approche spécifique à PostgreSQL. Cela améliore considérablement les performances par rapport aux DELETE
méthodes traditionnelles lorsqu'il s'agit de jeux de données volumineux.
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!