MySQL 重複行削除ガイド: 一意のレコードを効率的に保持する
この記事では、MySQL テーブルから重複データを削除し、重複データの各セットから 1 つのレコードを保持する方法について説明します。 SELECT DISTINCT
を使用して一意の値をフィルターで除外することは可能ですが、この記事では DELETE
コマンドを使用してこれを実現する方法に焦点を当てます。
重要なヒント:
偶発的なデータ損失を防ぐために、削除操作を実行する前に必ずテーブルをバックアップしてください。
最小の ID を持つレコードを保持します:
重複の中で最小の ID を持つ行を保持するには、次の SQL ステートメントを実行します:
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name;</code>
最大の ID を持つレコードを保持します:
重複の中で最大の ID を持つ行を保持するには、次の SQL ステートメントを実行します:
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name;</code>
その他の注意事項:
効率に関する警告:
上記の方法は効率的ではなく、データベース接続の過負荷を引き起こす可能性があります。
整合性要件:
AND n1.id < n2.id
(または AND n1.id > n2.id
) 句を含める必要があります。 この条件を無視すると、テーブル内のすべての行が削除される可能性があります。
代替:
パフォーマンスを向上させるには、次の INSERT
および DISTINCT
クエリの使用を検討してください。
<code class="language-sql">INSERT INTO tempTableName (cellId, attributeId, entityRowId, value) SELECT DISTINCT cellId, attributeId, entityRowId, value FROM tableName;</code>
その後、元のテーブルを削除し、一時テーブルの名前を変更できます。 この方法ではデータの直接削除が回避されるため、効率とセキュリティが向上します。
以上が1 つのレコードを保持したまま、MySQL で重複する行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。