「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 一意のインデックスは、既存の重複のあるテーブルから重複を削除できますか?またその方法は?

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

2024 年 11 月 8 日に公開
ブラウズ:461

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. データを一時ファイルにコピーします。 table.
  2. 元のテーブルを切り詰めます。
  3. 一意のインデックスを作成します。
  4. INSERT IGNORE を使用してデータを元のテーブルにコピーし、重複する行をすべて破棄します。

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

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;

追加の考慮事項

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3