[MySQL] OPTIMIZE TABLE für mehrere Tabellen und Datenbanken

anddie

Well-known member
ID: 171
L
3 Mai 2006
2.270
133
Hi,

gibt es einen Befehl analog zu OPTIMIZE TABLE, wo ich in allen Datenbanken gleich alle Tabellen optimieren kann?
Oder muss ich dies umständlich per Script erledigen und erstmal alle vorhandenen Datenbanken auslesen, dann für jede DB die Tabellen auslesen und dies dann einzeln erledigen?

anddie
 
Mir ist nichts anderes bekannt. Ich mach es also per Script. Aber ich bin auch nicht allwissend, deswegen *merk* :mrgreen:
 
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.

Wird die Db von selbst Optimiert ?

Wie ist denn das zu verstehen ?
 
Trotzdem musst du vorher die Tabellen "auslesen", oder du schreibst es fix rein.
aso, jetzt verstehe ich was gemeint war :biggrin:

Wird die Db von selbst Optimiert ?

Wie ist denn das zu verstehen ?
neija optimieren, weiß net ob das so, dass ist was du gerade drunter verstehst, im prinzip wird nur der leere freiraum in den mysql-dateien partitioniert und noch die daten in die mysql-datei geschrieben und geschlossen (oder war das flush?)
 
im prinzip wird nur der leere freiraum in den mysql-dateien partitioniert und noch die daten in die mysql-datei geschrieben und geschlossen (oder war das flush?)
Es ist nur Freiraum. Flush braucht man fast nur bei ner Sicherung der DB.

anddie, der jetzt wohl das was scripten muss :(
 
büdde (ist nicht getestet, aber müsste eigentlich funzen):

PHP:
// DB Connection

$result = mysql_list_tables($dbname);

while ($row = mysql_fetch_row($result)) {
   $tables .= $row[0].", ";
}

$tables = substr($tables, 0, -2);

mysql_query("OPTIMIZE TABLE ".$tables);

//
 
Zuletzt bearbeitet:
büdde (ist nicht getestet, aber müsste eigentlich funzen):
Thx, ich weiß zwar noch nicht, was das substr dort machen soll, aber werde es mal in der Konsole ausprobieren.
Muß dann eh noch ne Schleife drumherumbauen und die ganzen Datenbanken durchhopsen.

anddie
 
Der substr ist dafür nütze, dass er dir das letzte ", " abschneidet, welches hinter jede Tabelle angehängt wird.

Ohne substr: OPTIMIZE TABLE tabelle1, tabelle2, tabelle3, tabelle4,
Mit substr: OPTIMIZE TABLE tabelle1, tabelle2, tabelle3, tabelle4

Ersteres schmeißt nen Fehler ;)

Das mit der Schleife funzt analog zu den Tabellen mit
PHP:
$dbs = mysql_list_dbs($link);
while ($row = mysql_fetch_object($dbs)) {
   $aktuelle_db = $row->Database;
}

Den Rest solltest nun alleine hinbekommen ;)
 
Jo, aber die Methode macht auch nichts anderes als mein Code 8)

Da wäre ein Performance-Test mal interessant ;)

auf die Gefahr, dass mich ActionScripter nun als pingelig schelten wird:
Da implode() direkt in C(++) implementiert wurde, und deine Methode in nativem PHP-Code bin ich mir absolut sicher, dass implode() schneller sein wird, aber jedoch nur im Nanosekunden-Bereich.