ホームページ >データベース >mysql チュートリアル >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>
このクエリは重複行を巧みに削除します。 field1
と field2
に基づいて重複を識別し、最も高い 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 サイトの他の関連記事を参照してください。