ホームページ >データベース >mysql チュートリアル >PostgreSQL で一意制約を持つ大きなテーブルから重複行を効率的に削除するにはどうすればよいですか?

PostgreSQL で一意制約を持つ大きなテーブルから重複行を効率的に削除するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-14 07:45:42698ブラウズ

How Can I Efficiently Remove Duplicate Rows from a Large Table with a Unique Constraint in PostgreSQL?

PostgreSQL の一意制約を使用して大きなテーブルから重複を効率的に削除する

重複を含む大きなテーブル (数百万行) に一意制約を追加することは、標準 SQL DELETE ステートメントの時間がかかる性質のため、大きな課題となります。 この記事では、より効率的なソリューションを検討します。

非常に効果的な方法では、PostgreSQL 拡張機能と USING 句を利用します。次のクエリを考えてみましょう:

<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>

このクエリは重複行を巧みに削除します。 field1field2 に基づいて重複を識別し、最も高い max_field 値を持つ行を保持し、それより低い値を持つ行を削除します。

たとえば、email テーブルの user_accounts 列の一意性を強制し、最後に作成されたアカウント (最上位の id) を維持するには、クエリは次のようになります。

<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>

USING 句は、この PostgreSQL 固有のアプローチの効率性の鍵となります。 大規模なデータセットを扱う場合、従来の DELETE メソッドと比較してパフォーマンスが大幅に向上します。

以上がPostgreSQL で一意制約を持つ大きなテーブルから重複行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。