Das Ganze ist auch SQL-mäßig möglich.
Ich denke der Befehl lautet optimize table oder so ähnlich.
Mit myisamchk wird man bei Innodb's nicht weit kommen, obwohl man dort die Fragmentierung am deutlichsten spĂĽrt
Ich hatte mal mit einer Innodb-Datenbank in MySQL zu tun, die ca. 1 GB an Nutzdaten beinhaltete.
Das Datenbank-File im Dateisystem war aber ca. 15 GB groß. Aufgrund dauernder inserts und deletes ist es immer nur gewachsen. Die Nutzdaten der Datenbank lagen irgendwo verstreut innerhalb dieses Files herum. Inzwischen waren "Löcher" mit gelöschten Daten.
Bei den Operationen auf diese DB konnte sich MySQL die gewĂĽnschten Daten quer aus dieser groĂźen Daten von den verschiedensten Stellen zusammenkratzen.
Performant war das nicht mehr gerade, seltsamerweise vor allem, wenn man viele Datensätze mit einem Statement löschte.