Entwickler-Ecke

Datenbanken - Dateigröße einer MySQL Datenbank optimieren


jjturbo - Mo 18.08.14 09:32
Titel: Dateigröße einer MySQL Datenbank optimieren
Moin Forum,

wie kann ich die Dateigröße einer MySQL Datenbank zur Laufzeit mit Delphi optimieren?

Ich habe mal ein wenig rumprobiert und eine MySQL Datenbank mit Datensätzen gefüllt, bis sie ca. 20MB groß war. Wenn ich jetzt alle Datensätze lösche (delete from <tabelle>) bleibt die Dateigröße unverändert obwohl die Anzahl Datensätze=0 ist.

Im MySQL Workbench gibt es beispielsweise einen Button "Optimize Table". Wenn ich diese Funktion ausführe kommt eine Meldung "Table does not support optimize, doing recreate + analyze instead". Aber die Dateigröße schrumpft mit dieser Aktion wieder auf 96KB.

Ich greife mit Zeos Komponenten darauf zu, Delphi2007.
Ich hoffe Ihr könnt mir mit ein paar Ideen auf die richtige Spur helfen?

Danke Euch im voraus,
Gruß Oliver


WasWeißDennIch - Mo 18.08.14 11:31

Etwas Lesestoff dazu: http://dev.mysql.com/doc/refman/5.1/de/optimize-table.html


jjturbo - Di 19.08.14 08:50

Als kleines Workaround funzt folgendes:


Delphi-Quelltext
1:
2:
3:
  CREATE TABLE tabelle2 AS SELECT * FROM tabelle;
  DROP TABLE benutzername;
  ALTER TABLE tabelle2 RENAME TABELLE;


Noch nicht ganz elegant, ich hoffe noch eine bessere Lösung zu finden...


baumina - Di 19.08.14 09:03

Wenn du statt mit delete mit truncate löscht, müsste das auch gleich optimiert sein.


WasWeißDennIch - Di 19.08.14 09:56

Soll denn wirklich später die komplette Tabelle geleert werden, oder war das nur zum Testen?


jjturbo - Di 19.08.14 11:03

Nein, auf keinen Fall, in meiner Tabelle werden NIEMALS alle Daten gelöscht.


WasWeißDennIch - Di 19.08.14 11:30

Mir stellt sich die Frage, ob sich der ganze Aufwand denn überhaupt lohnt.
Zitat:
In den meisten Konfigurationen müssen Sie OPTIMIZE TABLE gar nicht ausführen. Auch wenn Sie viele Änderungen an Datensätzen variabler Länge vorgenommen haben, ist die Wahrscheinlichkeit, dass Sie dies häufiger als einmal in der Woche oder im Monat tun müssen, sehr gering – und selbst dies nur bei bestimmten Tabellen.

Kommst Du denn in die Situation, dass Du z.B. ein paar Millionen Datensätze temporär speichern und später wieder löschen musst, dies aber nur alle Jubeljahre? Wenn nicht (also auch keine ähnlich gelagerten Szenarien), wäre die Optimierung doch vergebene Liebesmüh.