Das ist recht easy: Um schneller zu sein geht
MySQL z.B. beim Löschen von Datensätzen nur her, und markiert die Datensätze als gelöscht; reorganisiert aber nicht die Tabelle. Du hast danach also 'Lücken' in der Tabelle, die irgendwann mal wieder aufgefüllt werden können - aber nicht müssen. Ist ähnlich wie die natürliche Fragmentierung auf einem Dateisystem.
Bei einem Optimize werden diese Lücken explizit aufgefüllt und verbrauchen daher dann nicht mehr unnötig Platz.
Wie gesagt: Das ganze hat einfach Geschwindigkeit als Grund, denn wenn die
DB bei jedem Löschen die Datenstruktur neu organisieren würde, dann würde das immer ziemlich lange dauern.
Einmal im Monat ein Optimize sollte an und für sich reichen. Mehr ist nicht nötig. Die paar KB / MB die da brachliegen sind in den Zeiten heutiger Plattengrößen eher marginal