Mysql
 sql >> Base de données >  >> RDS >> Mysql

Reconstruire l'index sur InnoDB

Avez-vous fait SHOW TABLE STATUS avant et après votre drop+rebuild ? Index_length change-t-il beaucoup ? Probablement pas même d'un facteur deux.

Je ne recommande presque jamais de reconstruire quoi que ce soit dans InnoDB. Ça ne vaut pas le coup. Une exception flagrante concerne FULLTEXT index.

Oui le mannequin ALTER reconstruira les index. Il en va de même pour OPTIMIZE TABLE . Les deux "défragmenteront" (dans une certaine mesure) l'index secondaire BTree et le BTree principal (qui contient les données et PRIMARY KEY ).

Les statistiques peuvent être beaucoup mis à jour à moindre coût en utilisant simplement ANALYZE TABLE . Même cela n'est pas souvent nécessaire. 5.6 a une bien meilleure façon de maintenir les statistiques.

Si vous n'utilisez pas déjà innodb_file_per_table=ON , je vous suggère de définir cela (SET GLOBAL ... ) et faites ALTER TABLE tbl ENGINE=InnoDB; une dernière fois.

Modification en ligne

Pour changer ft_* , vous devez reconstruire l'index. Cela implique un ALTER (ou OPTIMIZE , qui est implémenté en tant que ALTER ). Les nouvelles versions de MySQL ont ALGORITHM=INPLACE qui fait ALTER avoir peu ou pas d'impact sur le système en cours d'exécution. Mais, il y a des limites. Consultez le manuel.

Une alternative à un ALTER non INPLACE est pt-query-digest ou gh-ost . Voyez si l'un d'eux fonctionnera pour votre cas.

À moins de "reconstruire la table", vous pouvez DROP INDEX ... et ADD INDEX ... . Encore une fois, je ne sais pas si cela fonctionne pour les index FT "en place". Quoi qu'il en soit, vous perdriez l'utilisation de cet index pendant le processus.