ホームページ >データベース >mysql チュートリアル >大規模な SQL テーブルから重複行を効率的に削除するにはどうすればよいですか?
大規模な 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>
このクエリは、field1
と field2
に基づいて行を比較することにより、重複を効率的に削除します。 最も高い 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 サイトの他の関連記事を参照してください。