[MySql]

z-coupe

Erfahrenes Mitglied
Ich möchte die Grösse einer Tabelle in Byte ermitteln. Kann mir jemand sage wie das geht?

Und bitte nicht auf die Forumssuche oder Google verweisen und gleich den Thread schliessen. Wenn ich schon hier poste habe ich die Suche schon vorher bedient. Wenn jemand keine Lust hat zu antworten soll er es bleiben lassen.
 
Mit dem Script ueberpruefe ich den Overhead und optimiere dann gegebenenfalls die Tabelle.
PHP:
<?php
$tables=mysql_query("show tables",$mydb);
while ($table=mysql_fetch_row($tables))
	{
		$tableinfos=mysql_query("show table status like '".$table[0]."'",$mydb);
		while ($tableinfo=mysql_fetch_assoc($tableinfos))
			{
				if ($tableinfo['Data_free']!=0)
					{
						mysql_query("optimize table ".$table[0],$mydb);
					}
			}
	}
?>
Die Zeile
PHP:
$tableinfos=mysql_query("show table status like '".$table[0]."'",$mydb);
duerfte fuer Dich auch von Interesse sein. Ich weiss grad nicht wie das Feld dann heisst, aber das kannst Du ja ueber print_r() rausbekommen.

Und wenn wir mal auf die Forensuche verweisen und den Thread schliessen, dann hat das damit zu tun, dass ei Thema schon 100 mal angesprochen wurde, oder aber ein paar mal in der juengsten Vergangenheit.

..:not closed:.. ;)
 
Danke für die Antwort. Brauche zwar keinen PHP- Code aber du hast mir trotzdem weitergeholfen. Allerdings frage ich mich jetzt welches Feld mir die tatsächliche Grösse in Byte ausgibt, vermutlich Data_length. Da könnte allerdings auch die Länge des Strings enthalten sein. Ich guck mal in MySql Manuel

P.S.
Danke, dass er nicht geclosed wurde:) . Das letzte mal als mein Thread geclosed wurde hatte auch auch in der Formussuche keine passende Antwort gefunden. Ich habe nichts dagegen wenn man auf die Suche oder Google verweist, es sollte aber wenigstens die Möglichkeit bestehen als Threadersteller eine Statement abzugeben
 
Bei diesem Thema zu schliessen waer wohl was dreist, denn die Frage kommt nun wirklich nur mal alle paar Jahre oder so. ;) Ich hab selbst vor einer ganzen Weile mal eine Ewigkeit verbracht um herauszufinden wo ich diese Informationen finde, zum Schluss hab ich mich durch den Quellcode von PHPMyAdmin gewuehlt.
Data_length duerfte der richtige Wert sein. Falls Du PHPMyAdmin hast kannst Du damit ja vergleichen.
 
nee, habe keinen PHPMyAdmin drauf. Arbeite eigentlich mit Java, habe mit PHP nicht wirklich viel am Hut. Habe mir nur das Select- Statement von dir herausgefiltert

Edit:
Im MySql Handbuch steht folgendes.
Data_length = Länge der Daten-Datei.
Hört sich jetzt nicht so an als wäre es die Angabe der Grösse in Byte
 
Zuletzt bearbeitet:
Ich denk schon. In der Datendatei stehen ja wirklich nur die Daten drin. Eine Tabelle besteht ja bei MySQL, wenn ich mich nicht irre, aus 3 Dateien.
Ich kann das nachher mal probieren, und dann mit den Angaben aus PHPMyAdmin vergleichen. Aber ich denk Data_length duerfte schon okay sein.

Nachtrag: Hab grad mal fix geguckt.
Das sagt PHPMyAdmin:
Space usage
Type Usage
Data 6,312 Bytes
Index 2,048 Bytes
Total 8,360 Bytes
Das kommt aus meiner Query:
Array
(
[Name] => downloads
[Engine] => MyISAM
[Version] => 10
[Row_format] => Dynamic
[Rows] => 37
[Avg_row_length] => 170
[Data_length] => 6312
[Max_data_length] => 281474976710655
[Index_length] => 2048
[Data_free] => 0
[Auto_increment] => 70
[Create_time] => 2005-11-30 16:11:26
[Update_time] => 2006-07-27 10:53:09
[Check_time] => 2006-07-27 10:53:09
[Collation] => latin1_swedish_ci
[Checksum] =>
[Create_options] =>
[Comment] =>
)
Und so sieht es im Dateisystem aus:
-rw-rw---- 1 root root 6.2K 2006-07-27 10:53 downloads.MYD
-rw-rw---- 1 root root 2.0K 2006-07-27 10:53 downloads.MYI
-rw-rw---- 1 root root 8.8K 2005-11-30 16:11 downloads.frm

Kommt also hin.
 
Hallo, um dieses Thema vielelicht nochmal aufzugreifen....

Gibt es diese Möglichkeit auch in einer MS-SQL Datenbank?
 
Okay hab was gefunden....
Es gibt eine Stored Procedure im MS-SQL Server
einfach den Query Analizer aufrufen und folgendes eingeben.

Code:
sp_spaceused 'tabellenname'

MfG

Andreas
 
Zurück