mysql - Suppression de Lignes de InnoDB est très lent

J'ai une base de données mysql avec env. 1 to de données. Tableau fuelinjection_stroke a env. 1.000.000.000 lignes. ID est la clé primaire qui est automatiquement incrémenté à chaque insertion.

Je suis en train de supprimer la première 1.000.000 de lignes à l'aide d'une déclaration très simple:

Delete from fuelinjection_stroke where DBID < 1000000;

Cette requête est takeing très long (>24h) sur mon dédié 8core Xeon Serveur (32 GO de Mémoire de Stockage SAS).

Aucune idée de savoir si le processus peut être accéléré?

1 milliard de lignes, c'est beaucoup. Avez-vous des indices sur la table, en plus de la pkey? Lorsque vous supprimez des lignes, les indices doit être mis à jour, ce qui est probablement ce qui prend du temps. Je ne sais pas si ça marchera dans ce cas, mais pourriez-vous essayer de faire le supprimer au sein d'une transaction et de voir si cela fonctionne mieux?
Pour l'OP, pouvez-vous nous informer sur le résultat de tout cela, je suis vraiment intéressé. 🙂
La suppression est très lent. L'approche de supprimer des portions de 10.000 s fonctionne - mais ce n'est pas d'accélérer le processus dans son ensemble. J'ai fini par faire le suivant: j'ai viré la table dans un fichier à l'aide de la commande mysqldump. J'ai ensuite utilisé sed -i '1,1000000 d' un fichier.sql pour supprimer des lignes du fichier de vidage. J'ai tronqué la table et rechargé le fichier de vidage ... qui s'est avéré être la méthode la plus rapide ...
OP mentionne dans un commentaire à Uriil la réponse de "n'avoir pas d'indices ou les clés étrangères de la table." Évidemment, si votre condition est l'utilisation d'une colonne sans index, puis MySQL a pour numériser l'ENSEMBLE de la TABLE afin d'être sûr qu'il a toutes les lignes qui sont DBID < 1000000. Alors que si DBID a un index sur elle, MySQL ne pas avoir à le faire.
Quel est le pourcentage de lignes supprimées dans ce cas? Si c'est plus de 30% des lignes, alors il serait préférable de copier les 70% restants dans la nouvelle table, puis renommez la nouvelle table d'origine et de renommer l'original pour vieux et puis chute de l'ancien tableau.

OriginalL'auteur user1938509 | 2014-04-01