web-dev-qa-db-fra.com

Comment puis-je reconstruire les index et mettre à jour les statistiques dans MySQL innoDB?

J'ai de l'expérience avec MS SQL Server où il est possible et utile de statistiques de mise à jour et reconstruire des index . Je ne trouve pas cette option dans MySQL innoDB, existe-t-il une telle option? Sinon, comment la base de données MySQL crée-t-elle un plan d'exécution? Est-ce que MySQL met à jour les index et statistiques avec chaque UPDATE et INSERT?

38
Tomas Kubes

Ceci est fait avec

ANALYZE TABLE table_name;

En savoir plus à ce sujet ici .

ANALYZE TABLE analyse et stocke la distribution de clés pour une table. Pendant l'analyse, la table est verrouillée avec un verrou de lecture pour MyISAM, BDB et InnoDB. Cette instruction fonctionne avec les tables MyISAM, BDB, InnoDB et NDB.

47
fancyPants

Pourquoi? On n'a presque jamais besoin de mettre à jour les statistiques. La reconstruction d'un index est encore plus rarement nécessaire.

OPTIMIZE TABLE tbl; reconstruira les index et fera ANALYZE; ça prend du temps.

ANALYZE TABLE tbl; est rapide pour InnoDB pour reconstruire les statistiques. Avec 5.6.6, c'est encore moins nécessaire.

22
Rick James

Vous pouvez également utiliser l'outil CLI fourni mysqlcheck pour exécuter les optimisations. Il a un tonne de commutateurs mais au plus basique, il vous suffit de saisir la base de données, le nom d'utilisateur et le mot de passe.

Ajouter ceci à cron ou au planificateur Windows peut en faire un processus automatisé . (MariaDB mais fondamentalement la même chose.)

6
bbrown