Êtes-vous DELETEing
et INSERTing
à peu près au même rythme? Est-ce que la table InnoDB?
Si oui aux deux, alors "ne vous inquiétez pas". Le DELETEs
libèrera des blocs et le INSERTs
réutilisera ces blocs (ou de nouveaux blocs si les INSERTs
avancent).
Les tables InnoDB sont composées de blocs de 16 Ko enchaînés dans une structure BTree. Ce que vous avez décrit libère des blocs d'un côté de l'arbre et crée de nouveaux blocs de l'autre côté. Cependant, chaque bloc peut résider n'importe où, donc le concept de «côté de l'arbre» est plus «virtuel» que «physique». Après avoir fait beaucoup de barattage, essayez le OPTIMIZE
une fois. Si cela ne réduit pas la taille de la table de moitié, c'est un indice supplémentaire que OPTIMIZE
ne vaut pas le coup. Un rétrécissement de 30% après beaucoup de baratte est quelque peu typique. Mais il se stabilise à peu près à cela et ne dépassera pas les 30%.
Si, d'autre part, vous êtes DELETEing
plus de la table à la fois, alors vous pouvez être mieux reconstruire la table avec les lignes non-à-être-supprimé. Cela combine les étapes de suppression et d'optimisation en une seule. Ensuite, utiliser pour retourner les tables « instantanément »:
RENAME TABLE real TO old, new TO real; DROP TABLE old;
Et faire pas faire des inserts pendant la reconstruction.