ホームページ >データベース >mysql チュートリアル >単一のインスタンスを保持しながら、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
を使用するよりも高速です。 tableName
、cellId
、attributeId
、entityRowId
、value
を実際の列名に置き換えてください。
以上が単一のインスタンスを保持しながら、MySQL テーブルから重複行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。