Je suis actuellement un débutant sur Mysql et on m'a confié la tâche de supprimer plus de 200 000 données via phpmyadmin.
En fait, j'ai parcouru toutes les données et en ai extrait les identifiants utilisateur, juste pour savoir que cela ne fonctionne pas comme je le pensais. En utilisant ce code:
DELETE FROM User_data WHERE user_id IN ( 18852,22233,31257888,234414,555551....88884442);
Je m'attendais à ce qu'il supprime toutes les 200 000 données à la fois, mais il n'a supprimé que 5 000 données à la place.
Merci d'avoir lu cette! J'espère avoir quelques réponses
Modifié: les User_ids ne sont pas ordonnés correctement
3 Réponses :
C'est votre clause IN qui a une limite, vérifiez le max_allowed_packet
vous pouvez effectuer cette requête à la place.
delete from User_data where user_id between 18852 and 18853 or user_id between 22233 and 22238 or user_id between 555551 and 555553
ou
delete from User_data where user_ID order by id desc limit 200000
Vous pouvez essayer ceci
DELETE FROM User_data WHERE user_ID LIMIT 200000;
Vous pouvez essayer de remplir une table temporaire contenant les valeurs user_id
à supprimer, puis effectuer une jointure de suppression:
CREATE TEMPORARY TABLE user_ids (user_id INT PRIMARY KEY); INSERT INTO user_ids (user_id) VALUES (18852), (22233), (31257888), (234414), (555551), ..., (88884442); -- or maybe load from CSV using LOAD DATA DELETE u1 FROM User_data u1 INNER JOIN user_ids u2 ON u1.user_id = u2.user_id;
Maintenant, parce que le La colonne user_id
de la table temporaire est une clé primaire, la recherche de jointure doit être très rapide (probablement un peu plus rapide que votre WHERE IN
actuel). En outre, cela résout le problème d'essayer de passer trop de paramètres IN
dans la requête. Avec cette solution, vous n'avez pas du tout à faire cela.
Merci beaucoup Tim, cela fonctionne comme un charme. Au lieu d'utiliser une table temporaire, j'ai créé une table et y ai chargé des données car il y en a trop à taper.
Alors, êtes-vous en train de dire que l'instruction de suppression s'est terminée, mais n'a supprimé que les enregistrements 5K, ou qu'elle n'a pas du tout fini?
Salut Tim, cela s'est terminé mais seulement 5k enregistrements ont été supprimés