Comment avez-vous videz les frais généraux (Data_free) dans une table MEMORY MySQL?
Question
J'ai une table MEMORY MySQL pour un chat en direct (peut-être ce n'est pas le meilleur type de table pour cela?), Et suppression de lignes tous les soirs pour garder le chat enregistre la cause facile à gérer les frais généraux dans le tableau. Cependant, puisque vous ne pouvez pas exécuter OPTIMIZE sur une table MEMORY, comment voulez-vous vous débarrasser des frais généraux (Data_free
dans le show table status
)?
La solution
comment voulez-vous vous débarrasser des frais généraux?
Vous pouvez forcer une table en utilisant le moteur de stockage MEMORY / HEAP pour récupérer l'espace résiduel perdu de lignes supprimées en altérant, mais rien changer. par exemple.
ALTER TABLE my_table ENGINE=MEMORY;
Il récrire la table. Sauvegarde qui avec une citation de la documentation :
Pour libérer la mémoire utilisée par les lignes qui ont été supprimés, utilisez ALTER TABLEAU MOTEUR = MEMORY pour forcer une table reconstruire.
EDIT
peut-être ce n'est pas le meilleur type de table pour cela?
Il ne ressemble pas à l'application idéale d'une table MEMORY à mon avis - en gros, je considère comme un moteur existant. Certains Vivres pour la pensée
Tout d'abord, les tables de mémoire peuvent pas / ne pas utiliser les index b-tree (index de hachage uniquement), de sorte que les requêtes qui pourraient autrement utiliser un index pour la commande ou allant (c.-à-<,> opérations) station à trier / filtrer manuellement / exhaustive.
En second lieu, les tables InnoDB résidera dans la RAM si votre innodb_buffer_pool est assez grand, et fonctionne mieux avec threads simultanés, donc souvent Agit comme bon sinon mieux qu'une table MEMORY pour la plupart des applications.
En troisième lieu, peut-être plus important encore, si votre MySQL est toujours désactivé, vous perdrez toutes les données de votre table. Il y a des implications de troncature de table aussi si vous utilisez la réplication.