-
taille des index
Bonjour,
J'ai un petit problème avec un index sur une table :
Ma base possède 200 Mo de données et 6,5 Go d'index !
J'ai indexé sur cette table un champs date et j'ai une clé primaire qui est un numéro.
Quand j'exporte ma table et que je la réinjecte dans une autre base (sur le même serveur) je n'ai plus que 45 Mo d'Index.
Comment faire pour compresser les index (j'avais déjà fait import export de la table il y a un mois) ou pour les réduire.
D'autres pistes ?
merci
-
j'ai trouvé quelquechose :
il ya une procédure OPTIMIZE table nom_de_la_table qui m'a réduit la taille des index de 6,5 Go à 45 Mo !
Mais mes index continuent à grossir (quelques mégas par jour) alors une solution serait de lancer cette requête tous les jours.
Ma nouvelle question est pourquoi ils continuent d'augmenter, pourquoi OPTIMIZE arrive à les réduire autant et pourquoi MySQL ne le fait pas automatiquement ?
merci
-
Tiens c'est bien dommage que personne ne t'ai répondu. Si t'es encore inscrit sur le forum et que tu as trouvé la soluce depuis n'hésite pas a faire partager ^^
-
Le phénomène que tu décris est tout à fait normal : cela s'appelle la fragmentation.
Au niveau données, lorsque l'on fait un insert, l'enregistrement vient s'ajouter en fin de table. Quand on fait un delete, l'enregistrement est supprimé et il y a un espace vide non comblé dans le fichier.
Conclusion : plus une table subit des insertions et des suppression, plus elle va prendre dans la place, et ce, même si le nombre d'enregistrements reste constant.
Au niveau des index, c'est peut-être sensiblement le même phénomène.
La commande OPTIMIZE TABLE doit donc être effectuée aussi régulièrement que possible, en tenant compte des contraintes suivantes :
- Le temps de verrouillage de la table. (blocage éventuel des applis)
- Le risque de fragmentation. (Pas besoin d'optimiser une table qui ne se fragmente pas)
- La marge vis-à-vis de l'espace-disque alloué à MySQL.
A mon avis, les meilleures solutions sont mixte :
- Un OPTIMIZE annuel sur toutes les tables de la base.
- Un OPTIMIZE plus régulier sur les tables qui risquent le plus d'être fragmentées.