J'ai une base de données nommée comté. Le comté a une table fragmentée GEO. J'ai exécuté OPTIMIZE TABLE GEO
contre la table Geo, mais cela a renvoyé l'erreur
"-tableau ne prend pas en charge Optimiser, de recréer + analysez plutôt OK".
Puis j'ai exécuté ALTER TABLE GEO ENGINE='InnoDB';
Et puis est allé pour ANALYZE TABLE GEO.
Mais il a toujours une fragmentation.
Enfin, je l'ai laissé tomber et j'ai recommencé. Il a toujours une fragmentation. Quelqu'un peut-il m'aider s'il vous plaît, comment puis-je le défragmenter?
Le message que vous avez vu n'a pas dit
" Tableau ne prend pas en charge Optimiser, ne recréez + analysez plutôt OK "
mais le message a dit
" Tableau ne prend pas en charge Optimiser, de recréer + analyser à la place OK "
Cela signifie que le moteur de stockage InnoDB déjà exécuté
ALTER TABLE GEO ENGINE='InnoDB';
ANALYZE TABLE GEO;
Il n'y avait pas besoin de le refaire.
Il y a une raison pour laquelle la fragmentation existe toujours
Si la clé primaire du tableau est un entier avec auto_incrènement, tous les numéros générés pour la clé principale sont en ordre croissant.
Lorsque la clé primaire était chargée dans l'indice BTTREE, la fragmentation a été faite. Pourquoi?
Vous trouverez peut-être cela surprenant, mais j'ai écrit une réponse à un message il y a environ 3 ans intitulé À quel point l'innodif est-il fragment innodube face à des insertions quelque peu sur les commandes?
Dans ce poste, j'ai expliqué comment les arbres binaires AVL provoqueront une rotation de la hauteur d'environ 45% du temps. Pour un BTREE, cela serait représenté comme des fissures de page BTRee. Qu'est-ce que signifie pour trier des données?
Ces demi-pages complètes sont ce qui manifeste la fragmentation.
Ceci est en outre illustré dans un autre poste que j'ai écrit l'année dernière ( pourquoi la taille de MySQL Myisam Table Index (Aka Myi Fichier) ne correspond pas après l'importation MySqldump? ) Où j'ai mentionné ce même problème pour Myisam.
Le seul moyen de réduire réellement la fragmentation serait de supprimer tous les index et de recréer les index. Si les tables sont gigantesques, cela ne vaut pas votre temps.
Les tables n'auront pas zéro fragmentation dans les meilleures circonstances. Vous avez fait tout ce que vous avez recommandé de réduire sa fragmentation. Il est temps de passer au problème suivant.