Philipp Hasenfratz: Mysql: Speicherbedarf einzelner Datensätze

Beitrag lesen

Halihallo Stefan

wie kann ich den Speicherbedarf einzelner Datensätze in MySQL-Tabellen ermitteln?

phpMyAdmin gibt heute schon ziemlich detailierte Auskünfte über den Platzbedarf.

Ich habe eine gegebene Abfrage, z.B, "SELECT * FROM MeineTabelle WHERE Bedingung;", habe, dann würde ich gerne wissen, wieviel Platz auf der Festplatte der so ausgewählte Datensatz belegt. Wird kein Datensatz gefunden, dann muss natürlich 0 rauskommen, werden mehrere Datensätze gefunden, dann der von insgesamt von diesen Datensätzen belegte Speicherplatz.

Ein Query wird dir das jedoch nicht ausgeben; das musst du wohl selber berechnen. Es gibt
in MySQL einige Möglichkeiten, wie man dies auslesen kann, jedoch nicht für einen und nur
einen Datensatz.
http://www.mysql.com/doc/en/SHOW_TABLE_STATUS.html

Wie kann ich das ermitteln?

Selber berechnen oder in der MySQL-Doku nachlesen.
Neben dem, was timothy gesagt hat, wollte ich noch etwas über Indizies sagen:
Die Indizies verbrauchen auch Speicherplatz; ziemlich viel dazu! - Da jeder Primary Key
auch an einen UNIQUE-Index geknüpft ist, halte ich es für angebracht, dies auch zu
nennen. Jede Datenbank verwendet AVL-Bäume (o. ä.) um die Indexstrukturen aufzubauen.
Es werden jeweils mehrere indizierte Werte einer Spalten zusammengepackt und zwar so,
dass sie sich optimal der Pagegrösse (auf Festplatten kann man nur Packete der Grösse
1024, 2048, ... Bytes lesen; niemals Bytes alleine) anpassen. Wenn du z. B. nur einen
Record in einer Tabelle hast und diesen über einen Primary Key ansprichst, verbraucht
der Index für diese Tabelle wohl ca. 1 KB + die Daten des Records selber + Metadaten
für den Tablehandler, ... Die Berechnung für den Speicherplatzbedarf eines einzigen
Records ist also etwas komplizierter. Was du jedoch wissen solltest ist, dass auch
Indizies Speicherplatz verbrauchen und dass diese auf Performance getrimmt sind und
bei dem Speicherplatz nicht umbedingt sparsam sind.

Viele Grüsse

Philipp