2010-04-21 6 views
4
ALTER TABLE tablename AUTO_INCREMENT = 10000000 

Cette requête est longue à mettre à jour. Pourquoi? J'ai besoin d'optimiser cette requête.La réinitialisation d'AUTO_INCREMENT prend beaucoup de temps dans MySQL

+2

Pourquoi avez-vous besoin de cette requête? Il semble que votre table n'ait pas besoin d'une clé primaire auto-incrémentée. Quelle est la structure de la table et quel est le but d'une telle réinitialisation? Quoi qu'il en soit, la reconstruction d'un index est toujours une opération consommatrice de ressources. J'espère que vous en avez besoin non pas sur la base régulière –

+0

Salut Sharpnel, Merci beaucoup pour votre réponse rapide. Notre site Web contient des données générées par l'utilisateur et des données générées par l'administrateur. nous avons un grand nombre d'utilisateurs aussi .. dans ce cas si l'administrateur doit insérer et mettre à jour les données de quantité en vrac et nous ne voulons pas entrer en conflit avec les données utilisateur, de sorte que nous réservons les ID en réinitialisant l'auto incrémenter et utiliser la même chose pour insérer et mettre à jour dans plusieurs tables. Comme nous procédons à une insertion et à une mise à jour en masse, nous écrivons les requêtes dans un fichier texte et le faisons via la ligne de commande J'espère que vous avez compris mon problème. S'il vous plaît aider – user320343

Répondre

5

ALTER TABLE provoque une recréation de la table entière - si votre table contient plusieurs lignes, cela peut prendre des siècles.

Si vous avez juste besoin d'augmenter la valeur de la valeur auto_increment, le moyen le plus rapide est d'insérer une ligne factice (et ensuite de la supprimer si nécessaire). Cela ne prendra qu'une fraction de seconde, alors que ALTER TABLE peut prendre des jours pour une grande table.

Par exemple, supposons que j'ai une table avec une colonne ID auto_increment et d'autres colonnes col1, col2 ...:

insert into autoinc_table set ID = 10000000; 
delete from autoinc_table where ID = 10000000; 
+0

Cela ne semble pas résoudre mon problème, ce qui est qu'un champ id int a manqué de ids. Suppression de lignes n'a pas aidé lui-même, et l'insertion d'une ligne ne semble pas déclencher pour réinitialiser la valeur auto-incriment. –

+3

Cette astuce ne fonctionne que si vous voulez augmenter la valeur d'incrémentation automatique. On dirait que vous voulez le réduire. – Martin

5

utilisateur et les données administrateur doivent être distingués non par id, mais par un autre champ. Si vous traiteriez un id comme un identifiant abstrait avec aucune autre signification il vous fera économiser beaucoup de temps et des ressources, faites-moi confiance.

+0

Voulez-vous dire avoir une autre colonne comme 'user_type' ou avoir une autre table avec un catalogue d'utilisateurs à l'intérieur? – Pathros

+0

@Pathros dépend de vos besoins –

Questions connexes