ホームページ  >  記事  >  データベース  >  一意のインデックスは、既存の重複のあるテーブルから重複を削除できますか?またその方法は?

一意のインデックスは、既存の重複のあるテーブルから重複を削除できますか?またその方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-25 08:10:17249ブラウズ

Can a Unique Index Remove Duplicates in a Table with Existing Duplicates, and How?

一意のインデックスによる重複の削除

重複データの挿入を防ぐために、フィールド A、B、 C および D。その結果、2,000 万件のレコード テーブルに重複レコードが存在します。疑問が生じます: これらのフィールドに一意のインデックスを追加すると、既存のフィールドを損なうことなく重複が削除されますか?

インデックスの修正と重複の処理

IGNORE 修飾子を指定しない ALTER TABLE ステートメントは、一意のレコードがすでに存在するため失敗します。ただし、IGNORE 修飾子を使用すると重複が削除されます。

MySQL バージョン 5.7.4 以降の代替アプローチ

MySQL バージョン 5.7.4 以降の場合、 IGNORE 修飾子はサポートされていません。別のアプローチをお勧めします。

  1. データを一時テーブルにコピーします。
  2. 元のテーブルを切り詰めます。
  3. 一意のインデックスを作成します。 .
  4. INSERT IGNORE を使用してデータを元のテーブルにコピーし、重複する行を破棄します。

INSERT IGNORE で重複を削除する構文

<code class="sql">CREATE TABLE tmp_data SELECT * FROM mytable;
TRUNCATE TABLE mytable;
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
INSERT IGNORE INTO mytable SELECT * FROM tmp_data;
DROP TABLE tmp_data;</code>

追加の考慮事項

ドキュメントでは、IGNORE 修飾子を使用した後にどの重複行が保持されるかについては指定されていません。ソリューションを大きなテーブルに適用する前に、より小さなデータセットでこれをテストすることをお勧めします。

以上が一意のインデックスは、既存の重複のあるテーブルから重複を削除できますか?またその方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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