ホームページ >データベース >mysql チュートリアル >単一のインスタンスを保持しながら、MySQL テーブルから重複行を効率的に削除するにはどうすればよいですか?

単一のインスタンスを保持しながら、MySQL テーブルから重複行を効率的に削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-23 13:31:14795ブラウズ

How to Efficiently Remove Duplicate Rows from a MySQL Table While Preserving a Single Instance?

MySQL で重複行を効率的に削除する

シナリオ: MySQL テーブル内の重複行は、データ入力エラーなどのさまざまな原因から発生する可能性があります。 これらの重複を削除することは、データの整合性と最適なデータベースのパフォーマンスを維持するために不可欠です。

問題: 課題は、各重複行の 1 つを除くすべてのインスタンスを削除することにあります。

解決策と注意事項:

重要な注意: DELETE クエリを実行する前に、必ずテーブルをバックアップしてください。 DELETE ステートメントを不適切に実装すると、取り返しのつかないデータ損失が発生する可能性があります。

方法 1: 最も低い ID を持つ行を保存する

このアプローチでは、最小の ID 値を持つ行が保持されます:

<code class="language-sql">DELETE n1
FROM names n1, names n2
WHERE n1.id > n2.id AND n1.name = n2.name;</code>

方法 2: 最も高い ID を持つ行を保存する

この代替案では、最大の ID 値を持つ行が保持されます:

<code class="language-sql">DELETE n1
FROM names n1, names n2
WHERE n1.id < n2.id AND n1.name = n2.name;</code>

大規模テーブルの効率の向上:

非常に大きなテーブルの場合、次の INSERT ... SELECT DISTINCT メソッドはより効率的なソリューションを提供します。

<code class="language-sql">CREATE TEMPORARY TABLE tempTableName AS
SELECT DISTINCT cellId, attributeId, entityRowId, value
FROM tableName;

TRUNCATE TABLE tableName;

INSERT INTO tableName SELECT * FROM tempTableName;

DROP TEMPORARY TABLE tempTableName;</code>

これにより、一意の行のみを含む一時テーブルが作成され、元のテーブルが切り捨てられて、一時テーブルからの一意のデータが移入されます。 これは一般に、大規模なデータセットに DELETE を使用するよりも高速です。 tableNamecellIdattributeIdentityRowIdvalue を実際の列名に置き換えてください。

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

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