web-dev-qa-db-fra.com

Quand les index de la base de données doivent-ils être reconstruits?

Je lisais à propos de refactoring une grande requête SQL SLO SQL sur ici , et la réponse la plus élevée actuelle provient du blé de Mitch, qui veut s'assurer que la requête utilise des index pour la majeure sélection et mentionne:

La première chose que je ferais est de vérifier que le travail d'entretien d'index actif est exécuté périodiquement. Sinon, obtenez tous les index existants reconstruits ou si cela n'est pas possible au moins des statistiques mises à jour.

Je suis seulement amateur dba et j'ai fait quelques programmes indépendants qui sont fondamentalement Java Clients de bureau et parfois un backend MySQL. Lorsque je configurais le système, je sais créer un Index sur les colonnes qui seront interrogées, il y a un cas de restauration Varcharne et un nom de Varcharne.

Cependant, je fixe ce système il y a des mois et j'ai quitté le client l'exploitant, et je pense que les index devraient augmenter car les données sont entrées et je crois que tout fonctionne toujours bien. Je suis inquiet que les index soient reconstruits périodiquement, car aujourd'hui, j'ai lu qu'il devrait y avoir un "travail d'entretien actif". Le seul travail de maintenance que j'ai défini sur la chose était une sauvegarde nocturne.

Je voulais demander à la communauté de la maintenance régulière qu'une base de données pourrait exiger. Est-il nécessaire de reconstruire des index? Puis-je faire confiance au backend MySQL pour continuer à aller si longtemps que personne ne gâche avec elle et que les données restent sous quelques gigaoctets?

26
Karl

Il n'est pas nécessaire de "reconstruire" un index. Ils sont toujours tenus à jour. Peut-être qu'il faisait référence à la reconstruction de la table. Selon vos habitudes d'utilisation et votre schéma, vous pouvez obtenir des pages fragmentées à Innodb et je pense que dans Myisam également. La reconstruction de la table peut améliorer les performances en se débarrassant de la fragmentation de vos données sur le disque. Je n'utilise pas régulièrement des tables MyISAM, mais je pense qu'il est recommandé d'exécuter "Optimiser la table" avec certains modèles d'utilisation. Voir les documents MySQL sur Optimiser la table pour de bonnes informations sur Myisam et InnoDB.

Je ne suis pas aussi familier avec Myisam Intricacies, mais avec InnoDB, il est vrai que les statistiques peuvent être obsolètes. La base de données conserve des statistiques estimées sur la manière dont vos données sont distribuées pour un indice donné et que ceux de se mettre à jour, mais MySQL/InnoDB a des fonctionnalités intégrées pour essayer de garder les statistiques actuelles. Vous n'avez généralement pas à vous en soucier.

Donc, si vous utilisez InnoDB, la réponse est non, vous n'avez généralement pas besoin de faire quoi que ce soit pour que vos index puissent bien performer. Je ne suis pas aussi sûr avec Myisam, je pense qu'il est plus courant de devoir optimiser ces tables régulièrement.

24
nathan

C'est généralement une bonne idée de configurer un cronjob pour optimiser les index et vérifier les erreurs.

Voir mysqlcheck . Un travail de cron typique ressemble à quelque chose comme mysqlcheck -Aaos, qui vérifie toutes les tables de toutes les bases de données pour les erreurs, optimise les index et uniquement des sorties sur l'erreur.

11
Eli

La réponse que vous avez liée à propos de la "maintenance régulière" était dans le contexte spécifique d'une table temporaire qui est tronquée et repeuplée régulièrement. Vous n'avez pas besoin de le faire à la grande majorité des installations de base de données MySQL.

2
staticsan