[MySQL / PHP] Datenbank Zeilengrösse ermitteln

digiTALE

Lt. Junior Grade
Registriert
Juli 2004
Beiträge
270
Tach gesagt,

ich bin auf der Suche, ein Weg zu finden, die Grösse der einzelnen Zeilen in meiner Datenbank in Bytes zu ermitteln. War schon fleißig dabei hier im Forum und bei Google zu suchen, nur habe ich nicht wirklich was gefunden. Weiß auch selber nicht so recht wie ich das anstellen soll und jmd kann mir mal einen Tipp geben.


mfg digiTALE
 
Willst du so alle Datentypen einbinden (int,float,double,...) und dann die Zeilengröße berechnen - richtig?

Oder willst du nur die Größe eines bestimmten Blob-Felds?
 
hey,

die Felder wie "id" und "datetime" müssen nicht mitgerechnet werden. Das heißt es sollen nur 4 Felder (varchar, text) in eine insgesamte Größe ausgegeben werden.
Wie könnte das ungefähr aussehen?

mfg digiTALE
 
Zuletzt bearbeitet:
Das geht nicht so einfach, und mir wäre auch kein spezieller BEfehl für bekannt.

Klar du könntest bei char einfach per length und ggf SUM alles zusammenzählen.
Aber bei numerischen Spaltentypen hörts dann spätestens auf.

Schau mal hier Speicherbedarf von Spaltentypen

Du müsstest also sowas wie erst das Spaltenformat ermitteln (zb. per SHOW FIELDS FROM table)
und dann anhand eines php-arrays (am günstigsten assoziativ) was die Daten/ bytes aus obigem link enthält berechnen.

Geht natürlich auch alles ohne php innerhalb einer mysql select abfrage, da ja die Spaltentypen der betreffenden Tabelle in der Regel vorher bekannt sind. Muss also nicht unbedingt sooo dynamisch sein. ^^

Ansonsten ginge noch die durchschnittliche Zeilengrösse einer Tabelle ausgeben, wenn dir das reicht, per SHOW TABLE STATUS.

Edit:
aber ich sehe gerade, Du willst ja nur varchar und textfelder berechnen :p

Naja dann einfach ungefähr so:

SELECT (LENGTH(varcharspalte) + 1 + LENGTH(textfeldspalte)+ 2) laengebytes FROM table

Bei Varchar mit mehr als 255 möglichen Zeichen

SELECT (LENGTH(varcharspalte) + 2 + LENGTH(textfeldspalte) + 2) laengebytes FROM table

Kann man natürlich noch etwas kompakter fassen, aber zur Verdeutlicherung erstmal nur so.
 
Zuletzt bearbeitet:
Danke schonmal für die Antwort :)

Das sind meine 4 Felder:

1. sms_name (varchar)
2. sms_nummer (varchar)
3. sms_datumzeit (varchar)
4. sms_nachricht (text)

Soll das dann so ungefähr aussehen!?
PHP:
$Abfrage = mysql_query ("SELECT (LENGTH(`sms_name`,`sms_nummer`,`sms_datumzeit`) + 1 + LENGTH(`sms_nachricht`)+ 2) laengebytes FROM $tabl");

PS: bin noch nicht so lange mit PHP vertraut ;)

mfg digiTALE
 
Net ganz. Du musst für jede einzelne varcharspalte 1 byte dazurechnen.
Also statt +1 dafür +3

Und das mit der length(1,2,3) geht glaube so net, wenn dann einzeln je spalte ein length

so ungefähr (noch nicht geprüft)

PHP:
$Abfrage = mysql_query ("SELECT (LENGTH(`sms_name`) + LENGTH(`sms_nummer`) + LENGTH(`sms_datumzeit`) + LENGTH(`sms_nachricht`) + 5) laengebytes FROM $tabl");
 
Zuletzt bearbeitet:
ich danke dir, werds dann gleich ausprobieren.

mfg digiTALE
 
Zurück
Oben