mmofacts.com

Größe eines Eintrages ermitteln

gepostet vor 18 Jahre, 4 Monate von MagicForrest
Hallo,
hab da mal ne kleine Frage...
Gibt es eine Möglichkeit die Größe/den Verbrauch eines Eintrages in einer Tabelle zu messen?
Mir ist da nur
show table status
bekannt, aber das gibt nur die Größe der gesamten Tabelle wieder.
Ich benötige das jedoch für nur einen Eintrag.
Hoffe das mir hierbei jemand helfen kann.
gepostet vor 18 Jahre, 4 Monate von Itchy
Öh wenn Du die Feldlängen aller Spalten aufsummierst, erhälst Du doch die Zeilenlänge, oder?
gepostet vor 18 Jahre, 4 Monate von Störti
Wenn du nirgends dynamische Feldlängen hast (also keine VARCHAR, TEXT etc.), ist das sogar ein fester Wert...
gepostet vor 18 Jahre, 4 Monate von MagicForrest
Das ganze ist aber dynamisch, und ich will nur einen einzigen Eintrag errechnen.
Also wieviel kb/etc. benötigt werden.
Das muss doch irgendwie möglich sein...
gepostet vor 18 Jahre, 4 Monate von knalli
Möglich sein muss es ja, denn phpMyAdmin zeigt ja Speicherbelegungen an. Ergo müssen solche Funktionen zur Verfügung stehen..
gepostet vor 18 Jahre, 4 Monate von Störti
PHPMyAdmin zeigt aber nur die Gesamtgrösse der Tabelle an und die Anzahl der Einträge (und damit die Durchschnittslänge eines Datensatzes).
Soweit ich weiss, gibt es eine solche Funktion bei MySQL nicht (wann braucht man sowas denn auch mal?).
Wozu willst du das denn eg ermitteln?
gepostet vor 18 Jahre, 4 Monate von HSINC
denke man koennte mit ein wenig rumgerechne auf basis des spaltentypes und des inhalts und dem wissen wie mysql die daten speichert die grösse schon bestimmen. nur ist das nen ziemlicher aufwand. insofern auch von mir die frage, warum willst du das wissen ?
gepostet vor 18 Jahre, 4 Monate von Itchy
Also entweder Du willst den Mittelwert, dann siehe die Lösung von Störti (Gesamtgröße durch Zeilenanzahl)
Oder Du möchtest die genaue Länge eines Records, dann würde ich den Record einfach lesen und die Größe selber berechnen, so kompliziert ist das nicht.
gepostet vor 18 Jahre, 4 Monate von MagicForrest
Original von BLUESCREEN
Benutzt du MyISAM?
dev.mysql.com/doc/refman/5.1/en/dynamic-format.html

Die Seite ist irgendwie leer...
Naja, Mittelwert reicht zwar, aber ich hätte es gerne genau..
Falls ich da aber nicht finde was schnell geht, werde ich es über die Tables machen, und 4 tables anlegen.
gepostet vor 18 Jahre, 4 Monate von BLUESCREEN
Original von MagicForrest
Die Seite ist irgendwie leer...

War vorhin auch schon ausgefallen, aber jetzt geht sie wieder.
Ansonsten: Cache von z.B. einer Suchmaschine nutzen.
gepostet vor 18 Jahre, 4 Monate von Fornax
Das nimmt nur die Anzahl Zewichen, so wie ich verstanden habe, will ner die Größe in z.B. kb oder mb haben. Dein Vorschlag entspricht dann einer Vereinfachung von dem:
Original von Itchy

Oder Du möchtest die genaue Länge eines Records, dann würde ich den Record einfach lesen und die Größe selber berechnen, so kompliziert ist das nicht.
gepostet vor 18 Jahre, 4 Monate von MagicForrest
Ja, ich hätte gerne die größe in kb..
Werde mal ein wenig herrumexperimentieren, vllt kommt dann was brauchbares raus
gepostet vor 18 Jahre, 4 Monate von Freshman
in c++ bekommst du die Daten als zero Terminated String.
So kannst du sehr einfach die größe in kb auslesen, indem
du ein strlen() auf alle Felder machst.
Dann hast du die größe.
gepostet vor 18 Jahre, 4 Monate von Störti
Es bringt jedoch wenig, wenn man bei Integer, Real oder gar ENUM bzw. SET Werten strlen() auf das macht, was die DB zurück liefert (vor allem wenn dann alles Zeichenketten sind), denn selbst ein 11-Stelliger Timestamp ist bei MySQL nur 4 Byte lang und nicht 11 Byte (wie als Zeichenkette), ENUM ist immer 1 Byte (auch wenn der Tabellenkopf grösser ist).
Ich würde alle statischen Feldlängen (Interer, Char etc.) als Variable im Code festsetzen und alle dynamischen Feldlängen per strlen ermitteln. Frage: Wie verhält sich das bei BLOB? Das sind ja Binärdaten, die werden ja immer anders behandelt...
Evtl. gibt es auch noch ne Funktion mysql_field_type()? Will nicht extra in ner Doku nachschauen...

Auf diese Diskussion antworten