"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-08
Parcourir:243

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, ce qui entraîne 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 à l'aide de INSERT IGNORE, en supprimant toutes les lignes en double.

Syntaxe de suppression des doublons avec 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;

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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3