ホームページ >データベース >mysql チュートリアル >SQL のみを使用して MySQL の重複行を効率的に削除するにはどうすればよいですか?

SQL のみを使用して MySQL の重複行を効率的に削除するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-24 02:01:13844ブラウズ

How Can I Efficiently Remove Duplicate Rows in MySQL Using Only SQL?

SQL を使用した MySQL の重複行の削除

MySQL データベース内の重複行は、データの不整合やパフォーマンスの問題を引き起こす可能性があります。この記事では、列「site_id」、「title」、「company」に基づいてテーブル (例: 「jobs」) から重複行を削除することに焦点を当てています。

複雑な SQL クエリでも重複を特定できますが、より効率的な方法では MySQL のインデックス機能を利用します。 これには、重複行の削除を自動的に処理する一意のインデックスの作成が含まれます。

一意のインデックス アプローチ (非推奨)

以前の簡単な解決策には、ALTER IGNORE TABLE インデックスを指定した UNIQUE ステートメントを使用することが含まれていました。

<code class="language-sql">ALTER IGNORE TABLE jobs ADD UNIQUE INDEX idx_name (site_id, title, company);</code>

このメソッドは、インデックスの作成中に重複行を自動的に削除します。 ただし、このアプローチは MySQL 5.6 で非推奨となり、以降のバージョンでは削除されます。

利点 (古い MySQL バージョンの場合):

  • シンプルさ: 個別の削除ステートメントは必要ありません。
  • 自動化: 今後の重複挿入を防ぎます。
  • パフォーマンスの向上: 独自のインデックスにより、データの取得速度が向上します。

最新の MySQL ソリューション (5.7 以降):

MySQL 5.7 以降では、ALTER IGNORE TABLE メソッドはサポートされなくなりました。 代わりに、サブクエリで DELETE ステートメントを使用して重複を削除します。 これにはより複雑なアプローチが必要ですが、現在の MySQL バージョンとの互換性が保証されます。 一般的な解決策には、GROUP BY 句と HAVING 句を使用して重複を特定し、1 より大きいカウントをフィルタリングし、特定の基準に基づいて余分な行を削除します (例: 最小 ID の行を保持する)。 正確なクエリは、特定のニーズとテーブル構造によって異なります。 このアプローチの詳細な例については、MySQL ドキュメントを参照してください。

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

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