Doublon à la création de la clé primaire

Résolu/Fermé
crapoulou Messages postés 28160 Date d'inscription mercredi 28 novembre 2007 Statut Modérateur, Contributeur sécurité Dernière intervention 21 mai 2024 - 7 sept. 2022 à 12:24
crapoulou Messages postés 28160 Date d'inscription mercredi 28 novembre 2007 Statut Modérateur, Contributeur sécurité Dernière intervention 21 mai 2024 - 8 sept. 2022 à 12:38

Bonjour,

Je me bats avec une base hébergée sur AWS RDS (Aurora for MySQL).

J'avais une clé primaire mal faite et j'ai voulu la supprimer pour la recréer dans le bon ordre. La clé primaire est sur 4 champs.

Or, en la recréant, il s'est avéré qu'après la suppression, j'ai eu plein de doublons créée sur ces 4 champs, donc la création est en erreur.

Comment arriver à mes fins de supprimer ces doublons ?

La table fait 80 Go donc toute opération prend pas mal de temps.

- Je ne peux pas faire de simple requête de type "WHERE Id=Id" étant donné que la clé primaire est sur 4 champs
- J'ai tenté d'identifier les doublons via cette requête mais cela part en erreur :

SELECT * FROM MaTable GROUP BY Champ1, Champ2, Champ3, Champ4 HAVING  COUNT(*) > 1;
ERROR 1114 (HY000): The table '/rdsdbdata/tmp/#sqlb16_1fd_2' is full

- Est-ce que ce serait pas plus simple de créer une nouvelle table et de copier uniquement dans table2 tout enregistrement absent de table2 uniquement : et je n'aurai alors plus de doublons dans la nouvelle table ?

- Je tenterais bien aussi ça, je sais pas si ça peut supprimer les doublons tout seul... ?

ALTER TABLE MaTable ADD UNIQUE (Champ1, Champ2, Champ3, Champ4);

Merci d'avance !
 

A voir également:

2 réponses

jee pee Messages postés 40558 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 décembre 2024 9 458
Modifié le 7 sept. 2022 à 14:17

Bonjour,

Le select semble échouer car les tables de travail temporaires sont trop petites pour une table de 80 GO.

Il est à craindre que toute opération globale sur cette table posera soucis. Il faudrait voir le dimensionnement des tables temporaires (je ne connais pas assez Mysql pour t'aider sur ce point).

L'alter table ne va jamais supprimer des enregistrements (*), il échouera, mais n'est ce pas ce que tu indiques avoir déjà fait, plus haut ?

(*) je viens de lire qu'il existait dans Mysql une option ALTER IGNORE qui supprimait les doublons, particularité supprimée depuis la version 5.x car non conforme à la norme sql, surement un truc du genre un ordre DDL, la définition des données, ne doit pas agir sur les données elles mêmes, c'est du ressort des commandes DML.


0
crapoulou Messages postés 28160 Date d'inscription mercredi 28 novembre 2007 Statut Modérateur, Contributeur sécurité Dernière intervention 21 mai 2024 7 998
8 sept. 2022 à 12:38

Salut jee pee merci pour ta réponse.

En effet, ça aurait été bien ce ALTER IGNORE !! 

Bon, j'ai réussi finalement à isoler mes doublons (car que sur les 24 dernières heures, l'export a été possible).

J'ai retravaillé sur Exel pour faire des DELETE puis création de la clé puis les INSERT IGNORE.

Très moche mais ça fonctionne.

Et enfin, côté RDS, j'ai agrandi mon instance pour que la création d'INDEX fonctionne avec plus de perf" (sinon j'avais l'erreur suivante) :

ERROR 1034 (HY000): Incorrect key file for table 'MaTable'; try to repair it

Bon, et ben même avec l'INDEX remis correctement, mon CPU a toujours des pics à 100% ... ça me rend dingue ! Mdr

Je mets en résolu quand même ici car c'est un autre sujet :-)

Si un DBA (AWS RDS Aurora for MySQL) est dans le coin, je peux faire un autre sujet sur le CPU à 100%... lol

Merci ! ;-)

0