Optimiser mySql pour modifier plus rapidement la colonne d’ajout de table

J’ai une table qui a 170 002 225 lignes avec environ 35 colonnes et deux index. Je veux append une colonne. La commande alter table a duré environ 10 heures. Ni le processeur ne semblait occupé pendant cette période, ni les attentes excessives des IO. Ceci est sur une boîte de haute performance 4 voies avec des tonnes de mémoire.

Est-ce le meilleur que je puisse faire? Est-ce qu’il y a quelque chose que je peux regarder pour optimiser la colonne d’ajout dans le réglage de la firebase database?

J’ai été confronté à une situation très similaire dans le passé et j’améliore les performances de l’opération de cette manière:

  1. Créez une nouvelle table (en utilisant la structure de la table en cours) avec les nouvelles colonnes incluses.
  2. exécuter un INSERT INTO new_table (column1,..columnN) SELECT (column1,..columnN) FROM current_table;
  3. renommer la table en cours
  4. Renommez la nouvelle table en utilisant le nom de la table en cours.

ALTER TABLE dans MySQL va en fait créer une nouvelle table avec un nouveau schéma, puis INSERT toutes les données et supprimer l’ancienne table. Vous pouvez gagner du temps en créant la nouvelle table, en chargeant les données et en renommant la table.

De “livre de haute performance MySQL” (les gars de percona):

L’astuce habituelle pour charger efficacement la table MyISAM consiste à désactiver les clés, à charger les données et à renalbe les clés:

 mysql> ALTER TABLE test.load_data DISABLE KEYS; -- load data mysql> ALTER TABLE test.load_data ENABLE KEYS; 

Peut-être que vous pouvez supprimer l’index avant de modifier la table, car ce qui prend le plus de temps à générer est l’index?

Eh bien, je recommanderais d’utiliser les dernières versions de Percona MySQL, car il y a la note suivante dans le manuel MySQL

Dans d’autres cas, MySQL crée une table temporaire, même si les données n’ont pas besoin d’être copiées. Pour les tables MyISAM, vous pouvez accélérer l’opération de recréation d’index (qui est la partie la plus lente du processus de modification) en définissant la variable système myisam_sort_buffer_size sur une valeur élevée.

Vous pouvez d’abord ALTER TABLE DISABLE KEYS , puis append une colonne et ensuite ALTER TABLE ENABLE KEYS . Je ne vois rien peut être fait ici.

BTW, tu ne peux pas aller à MongoDB? Il ne reconstruit rien quand vous ajoutez une colonne.