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

大規模な SQL テーブルから重複行を効率的に削除するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-14 06:50:42619ブラウズ

How to Efficiently Remove Duplicate Rows from a Large SQL Table?

大規模な SQL テーブルから重複行を効率的に削除する

大きなテーブル (数百万行) に一意制約を追加するには、重複エントリを慎重に処理する必要があります。 標準 SQL クエリを使用して重複を直接削除すると、非常に時間がかかり、リソースが大量に消費される可能性があります。

簡単な方法の 1 つは、テーブルをバックアップし、一意制約を追加して、バックアップからテーブルを復元することです。これにより、一意の行のみが確実に保持されます。

ただし、より洗練されたアプローチでは、簡潔な SQL クエリを使用して削除プロセスを最適化します。

<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 値を持つ行を保持し、より低い値の重複を効果的に排除します。 例:

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

この例では、重複する電子メール アドレスを削除し、最も高い id (おそらく最後に作成されたもの) のアカウントを保持します。

重要な注意事項: USING 句は、行の直接比較を有効にすることでクエリの効率を大幅に向上させ、PostgreSQL 固有の機能です。 他のデータベース システムでは代替方法が必要になる場合があります。

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

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