[MySQL] création et suppression d'index sur table existante

Olivier Duffez (admin)
Membre du personnel
Comme vous le savez sans doute, j'essaie de limiter la taille de la table phpbb_search_wordmatch
J'ai supprimé des enregistrements mais j'ai l'impression que les index n'ont pas été mis à jour (c'est peut-être normal mais je ne m'y connais pas très bien en MySQL).

Est-il possible de supprimer puis de recréer les index, sachant que la table possède au moins 2,5 millions d'enregistrements ?
 
WRInaute impliqué
Re: [MySQL] création et suppression d'index sur table exista

Effectivement il y a beaucoup d'enregistrements, mais un moyen simple est de faire une copie de cette table dans une autre, disons temporaire, par ajout successif. Dans ce cas, les index sont recréés, et dans l'ordre que tu souhaite, l'ordre de sélection de la table originale.

Ensuite, tu doit pouvoir supprimer la table originale et renommer la copie.
 
WRInaute passionné
Oui, sans problème. Mais ne fais surtout pas ça via phpmyadmin ou autre.

Tu dois faire ça en ligne de commande, dans putty ou un équivalent.

Ca va prendre quelques minutes, faut toucher à rien et attendre la réponse "Truc effectué avec succès" et là t'auras le sourire.

Peut-être devrais-tu fermer le site le temps d'effectuer l'opération ? Perso c'est ce que j'ai fait la dernière fois que j'ai dû réparer une table à peu près aussi imposante. Mais je ne sais pas si c'était indispensable... simple précaution.
 
WRInaute passionné
Evidemment, 2,5 millions c'est beaucoup (la mienne était quand même moins grosse). Mais si tu fais ça en ligne de commande, je ne vois aucune raison que ça foire. C'est fait pour...
 
WRInaute passionné
Edit: (l'édit classique ne fonctionne plus évidemment) Je parlais évidemment de tout faire en un coup (via une seule ligne de commande), même si le chevauchement des messages rend mon intervention un peu ambiguë.
 
WRInaute passionné
L'important c'est surtout la durée parait-il ;-)

Pour te donner un ordre de grandeur, je crois que la re-création de mon index FULLTEXT avait duré une petite dizaine de minutes, tout de même... et contrairement à ce que je croyais, la suppression des index existants a duré encore plus longtemps.

Ce que je te conseille, c'est de commencer par un REPAIR table avant de recréer les index (enfin, je ne suis pas expert mysql non plus, je précise).
 
WRInaute impliqué
Si tu dois ajouter 2,5 mls d'enregistrements, commence par supprimer les index, fais tes insertions et recréé tes index. Ce sera beaucoup plus rapide.
 
WRInaute occasionnel
OPTIMIZE table

non seulement ça recalcule les index (à faire régulièrement, donc), mais ça allège l'espace disque utilisé par la table, et donc le temps que le serveur met à la lire:

-http://www-mrim.imag.fr/ressources/docMySQLe3.23_v4d/manuel_OPTIMIZE_TABLE.html#OPTIMIZE_TABLE
 
WRInaute impliqué
Didier_S a dit:
OPTIMIZE table

non seulement ça recalcule les index (à faire régulièrement, donc), mais ça allège l'espace disque utilisé par la table
Marrant, je ne savais pas que OPTIMIZE TABLE recalculait les index.
Une autre commande qui permet aussi de recalculer les index est, si ma mémoire est bonne, ANALYZE TABLE. À exécuter souvent sur les tables qui changent beaucoup !
 
Discussions similaires
Haut