54 votes

optimiser mySql pour modifier plus rapidement table ajouter colonne

J’ai une table qui comporte des 170,002,225 lignes avec environ 35 colonnes et deux index. Je tiens à ajouter une colonne. La commande alter table a pris environ 10 heures. Ni le processeur semblait occupé pendant ce temps ni y excessive waits io. C’est sur une zone de haute performance de 4 voies avec des tonnes de mémoire.

C’est le mieux que je peux faire ? Y a-t-il quelque chose que je peux regarder pour optimiser la colonne ajouter dans le réglage de la db ?

39voto

RRUZ Points 98685

J'ai fait face à une situation très similaire dans le passé et j'améliore les performances de l'opération de cette façon :

  1. Créez une nouvelle table (en utilisant la structure de la table actuelle) avec la nouvelle colonne (s) incluse.
  2. exécuter un ``
  3. renommer la table actuelle
  4. renommer la nouvelle table en utilisant le nom de la table actuelle.

7voto

FoneyOp Points 216

MySQL est en fait va créer une nouvelle table avec le nouveau schéma, puis re - toutes les données et supprimer l’ancienne table. Vous pourriez gagner du temps en créant la nouvelle table, de charger les données et d’ensuite renommer la table.

De « Haute Performance MySQL book » (les gars percona) :

Le truc habituel pour le chargement des tables MyISAM efficacement consiste à désactiver les touches, charger les données et les renalbe les touches :

4voto

FractalizeR Points 12887

Eh bien, je vous conseille d'utiliser la dernière Percona MySQL construit plus depuis qu'il y a la note suivante dans le manuel MySQL

Dans d'autres cas, MySQL crée un table temporaire, même si les données ne serait pas strictement besoin d'être copiés. Pour les tables MyISAM, vous pouvez accélérer l'indice de la re-création de l'opération (qui est la partie la plus lente de la modification par le réglage de la myisam_sort_buffer_size système variable à une valeur élevée.

Vous pouvez le faire ALTER TABLE DISABLE KEYS d'abord, puis ajouter la colonne, puis en ALTER TABLE ENABLE KEYS. Je ne vois pas ce qui peut être fait ici.

BTW, ne pouvez-vous pas aller MongoDB? Il n'a pas de reconstruire quoi que ce soit quand vous ajoutez une colonne.

3voto

Phpdna Points 8166

Peut-être que vous pouvez supprimer l'index avant de modifier la table parce que ce qui est prendre la plupart du temps à construire est l'index?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X