ホームページ > データベース > mysql チュートリアル > **既存のインデックスを一意に変更するか、新しいインデックスを追加することで重複レコードを削除できますか?**

**既存のインデックスを一意に変更するか、新しいインデックスを追加することで重複レコードを削除できますか?**

Linda Hamilton
リリース: 2024-10-28 09:43:29
オリジナル
474 人が閲覧しました

**Can You Remove Duplicate Records by Modifying an Existing Index to Unique or Adding a New One?**

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

レコードの重複を防ぐための一般的なアプローチは、関連するテーブル列に一意のインデックスを作成することです。しかし、最近の間違いにより、代わりに通常のインデックスが作成され、2,000 万もの大規模なレコード テーブル内で重複が永続化されてしまいました。

質問: 既存のインデックスを一意に変更するか、追加する必要がありますか?これらの列に新しい一意のインデックスを作成すると、重複レコードが削除されますか? それとも、既存の一意のエントリが原因で操作が失敗しますか?

回答:

IGNORE を使用して一意のインデックスを追加します。修飾子は重複レコードを削除します:

<code class="sql">ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);</code>
ログイン後にコピー

ただし、この修飾子は MySQL 5.7.4 以降では非推奨となり、エラーが発生します。この問題を回避するには、次の手順を実行できます:

  1. 元のテーブルのデータを保持する一時テーブルを作成します:

    <code class="sql">CREATE TABLE tmp_data SELECT * FROM mytable;</code>
    ログイン後にコピー
  2. 元のテーブルを切り詰めます:

    <code class="sql">TRUNCATE TABLE mytable;</code>
    ログイン後にコピー
  3. 元のテーブルに一意のインデックスを作成します:

    <code class="sql">ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);</code>
    ログイン後にコピー
  4. データをコピーして戻します重複行を無視して元のテーブルにコピーします:

    <code class="sql">INSERT IGNORE INTO mytable SELECT * from tmp_data;</code>
    ログイン後にコピー
  5. 一時テーブルをドロップします:

    <code class="sql">DROP TABLE tmp_data;</code>
    ログイン後にコピー

または、一意のインデックスを追加します。 IGNORE 修飾子を使用しない場合、クエリはエラー 1062 (重複キー) で失敗します。

以上が**既存のインデックスを一意に変更するか、新しいインデックスを追加することで重複レコードを削除できますか?**の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート