Question

Je lisais des informations sur le refactoring d’une requête SQL longue et volumineuse sur ici , et le plus élevé en cours La réponse provient de Mitch Wheat, qui souhaite s’assurer que la requête utilise des index pour les sélections majeures, et mentionne:

  

La première chose que je voudrais faire est de vérifier qu’un travail de maintenance d’index actif est exécuté périodiquement. Sinon, reconstruisez tous les index existants ou, si ce n’est pas possible, mettez les statistiques à jour.

Je ne suis qu’un amateur de bases de données et j’ai créé quelques programmes indépendants, qui sont essentiellement des clients de bureau Java et parfois un serveur MySQL. Lorsque je configure le système, je sais que pour créer un index sur les colonnes qui seront interrogées, il existe un varIDCar CaseID et un varcharCustName.

Cependant, j’ai mis ce système en place il y a plusieurs mois et j'ai laissé le client l'exploiter. Je pense que les index devraient augmenter à mesure que les données sont entrées et que tout fonctionne encore correctement. Je crains cependant que les index ne soient reconstruits périodiquement, car aujourd’hui, j’ai lu qu’il devrait y avoir un «travail de maintenance actif». Le seul travail de maintenance que j’ai défini était une sauvegarde nocturne.

Je voulais interroger la communauté sur la maintenance régulière qu'une base de données pourrait nécessiter. Est-il nécessaire de reconstruire les index? Puis-je faire confiance au serveur MySQL pour continuer tant que personne ne le gâchera et que les données resteront sous quelques giga-octets?

Était-ce utile?

La solution

Il n'est pas nécessaire de "reconstruire" un index. Ils sont toujours tenus à jour. Peut-être parlait-il de reconstruire la table. En fonction de vos schémas d'utilisation et de votre schéma, vous pouvez obtenir des pages fragmentées dans InnoDB, et je pense également dans MyISAM. La reconstruction de la table peut améliorer les performances en éliminant la fragmentation de vos données sur le disque. Je n'utilise pas les tables MyISAM régulièrement, mais je pense qu'il est recommandé d'exécuter 'OPTIMIZE TABLE' avec certains modèles d'utilisation. Consultez la documentation MySQL sur TABLE OPTIMISÉE pour des informations utiles. sur MyISAM et InnoDB.

Je ne connais pas aussi bien les subtilités de MyISAM, mais avec InnoDB, il est vrai que les statistiques peuvent devenir obsolètes. La base de données conserve des statistiques estimées sur la façon dont vos données sont distribuées pour un index donné. Il est possible que celles-ci deviennent obsolètes, mais MySQL / InnoDB possède des fonctionnalités intégrées pour essayer de maintenir les statistiques à jour. Vous n'avez généralement pas à vous en préoccuper.

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

Autres conseils

Il est généralement judicieux de configurer un travail cron pour optimiser les index et vérifier les erreurs.

Voir mysqlcheck . Un travail cron typique ressemble à quelque chose comme mysqlcheck -Aaos , qui vérifie les erreurs dans toutes les tables de toutes les bases de données, optimise les index et n'indique que les erreurs.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top