En utilisant mysql, vous pouvez constater que, bien qu’une table supprime beaucoup de données, les fichiers de données et les fichiers index de la table sont étrangement petits. Cela s’explique par le fait que mysql laisse de nombreux trous de données lors de la suppression de données (notamment Text et BLOB), ce qui occupe l’espace des données originales, donc la taille du fichier ne change pas. Ces trous peuvent être réutilisés à l’avenir lorsque les données seront insérées, et bien sûr ils peuvent y rester. Ce trou augmente non seulement le coût de stockage, mais réduit aussi l’efficacité de la balayage de la table en raison de la fragmentation des données.
Scénarios d’utilisation :Si vous avez supprimé une grande partie du tableau, ou si vous avez apporté beaucoup de modifications à un tableau avec des lignes de longueur variable (une avec des colonnes VARCHAR, BLOB ou TEXT), vous devriez utiliser OPTIMIZE TABLE. Les enregistrements supprimés sont conservés dans la liste chaînée, et les opérations INSERT suivantes réutilisent l’ancien emplacement des enregistrements. Vous pouvez utiliser OPTIMIZE TABLE pour réutiliser l’espace inutilisé et organiser des fragments de fichiers de données. [Lorsque beaucoup de données sont supprimées de votre bibliothèque, vous constatez que la taille du fichier de données n’a pas diminué. Cela est dû à la fragmentation laissée dans le fichier de données après l’opération de suppression.
Dans la plupart des réglages, vous n’avez pas besoin d’exécuter OPTIMIZE TABLE. Même si vous faites beaucoup de mises à jour sur des lignes de longueur variable, vous n’avez pas besoin de les lancer souvent, une fois par semaine ou une fois par mois, uniquement pour des tables spécifiques.
OPTIMIZE TABLE ne fonctionne que pour les tables MyISAM, BDB et InnoDB.
Pour les tables BDB, la TABLE OPTIMIZE est actuellement mappée à la TABLE ANALYZE. Pour les tables InnoDB, la OPTIMIZE TABLE est mappée à la ALTER TABLE, qui reconstruit la table. Les opérations de reconstruction mettent à jour les statistiques de l’index et libèrent de l’espace inutilisé dans les index regroupés.
Note : MySQL verrouille la table pendant l’exécution OPTIMIZE TABLE.
Pour myisam, vous pouvez utiliser directement la table d’optimisation table.name,Quand il s’agit du moteur InnoDB, il affichera « Table ne supporte pas l’optimisation, on fait recréer + analyser à la place », et en temps normal, si vous convertissez de myisam à innodb, vous utiliserez alter table table.name engine='innodb' pour convertir, et vous pouvez aussi l’utiliser pour l’optimisation.Ainsi, lorsqu’il s’agit du moteur InnoDB, nous pouvons utiliser alter table table.name engine='innodb' au lieu d’optimiser pour l’optimisation。
Pour visualiser les effets avant et après, vous pouvez utiliser la commande afficher l’état de la table, comme afficher l’état de la table depuis [base de données] comme « [table_name] » ; Le data_free dans le résultat de retour est l’espace de stockage occupé par le vide.
Le script shell qui implémente la réparation temporelle par lots MySQL et la table d’optimisation de table optimisée est le suivant :
Langue source:
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
|