Autor Beitrag
jjturbo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 516

Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
BeitragVerfasst: Mo 18.08.14 09:32 
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

_________________
Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mo 18.08.14 11:31 
jjturbo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 516

Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
BeitragVerfasst: Di 19.08.14 08:50 
Als kleines Workaround funzt folgendes:

ausblenden 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...

_________________
Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Di 19.08.14 09:03 
Wenn du statt mit delete mit truncate löscht, müsste das auch gleich optimiert sein.
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 19.08.14 09:56 
Soll denn wirklich später die komplette Tabelle geleert werden, oder war das nur zum Testen?
jjturbo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 516

Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
BeitragVerfasst: Di 19.08.14 11:03 
Nein, auf keinen Fall, in meiner Tabelle werden NIEMALS alle Daten gelöscht.

_________________
Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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.