Maison  >  Article  >  base de données  >  Un index unique peut-il supprimer les doublons dans une table contenant des doublons existants, et comment ?

Un index unique peut-il supprimer les doublons dans une table contenant des doublons existants, et comment ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 08:10:17249parcourir

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

Suppression des doublons avec un index unique

Dans le but d'éviter l'insertion de données en double, un index normal a été créé par erreur pour les champs A, B, C et D, entraînant la présence d'enregistrements en double dans une table de 20 millions d'enregistrements. La question se pose : l'ajout d'un index unique pour ces champs supprimera-t-il les doublons sans compromettre ceux existants ?

Correction de l'index et gestion des doublons

Ajout d'un index unique avec le L'instruction ALTER TABLE sans le modificateur IGNORE échouera car des enregistrements uniques existent déjà. Cependant, l'utilisation du modificateur IGNORE supprimera les doublons.

Approche alternative pour les versions MySQL 5.7.4 et supérieures

Pour les versions MySQL 5.7.4 et supérieures, où le Le modificateur IGNORE n'est pas pris en charge, une approche différente est recommandée :

  1. Copiez les données dans une table temporaire.
  2. Tronquez la table d'origine.
  3. Créez l'index unique .
  4. Copiez les données dans la table d'origine en utilisant INSERT IGNORE, en supprimant toutes les lignes en double.

Syntaxe pour supprimer les doublons avec 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>

Considérations supplémentaires

La documentation ne précise pas quelle ligne en double sera conservée après l'utilisation du modificateur IGNORE. Il est conseillé de tester cela sur un ensemble de données plus petit avant d'appliquer la solution à une grande table.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn