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 ?

Comment puis-je supprimer efficacement les lignes en double d'une grande table avec une contrainte unique dans PostgreSQL ?

Mary-Kate Olsen
Libérer: 2025-01-14 07:45:42
original
696 Les gens l'ont consulté

How Can I Efficiently Remove Duplicate Rows from a Large Table with a Unique Constraint in 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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal