How to Get the Size of a Table in MySQL
On Dezember 17, 2021 by adminWie die meisten relationalen Datenbanken bietet MySQL nützliche Metadaten über die Datenbank selbst. Während die meisten anderen Datenbanken diese Informationen als catalog bezeichnen, bezieht sich die offizielle MySQL-Dokumentation auf die INFORMATION_SCHEMA-Metadaten als tables.
Ungeachtet des Namens kommt es auf die Informationen an, die von diesen INFORMATION_SCHEMA-Tabellen bereitgestellt werden. Alles von views und user_privilieges bis columns und tables ist in der INFORMATION_SCHEMA zu finden. Für unsere Zwecke sind wir besonders an den tables-Metadaten interessiert, die wir abfragen können, um die Größe der verschiedenen Tabellen im System zu ermitteln.
List Table Sizes From a Single Database
Wie in der offiziellen Dokumentation zu sehen ist, enthält die Tabelle INFORMATION_SCHEMA.TABLES etwa 20 Spalten, aber um den von den Tabellen belegten Speicherplatz zu ermitteln, konzentrieren wir uns auf zwei Spalten im Besonderen: DATA_LENGTH und INDEX_LENGTH.
-
DATA_LENGTHist die Länge (oder Größe) aller Daten in der Tabelle (inbytes). -
INDEX_LENGTHist die Länge (oder Größe) der Indexdatei für die Tabelle (ebenfalls inbytes).
Mit diesen Informationen können wir eine Abfrage ausführen, die alle Tabellen in einer bestimmten Datenbank zusammen mit dem Speicherplatz (Größe) jeder Tabelle auflistet. Wir können sogar noch etwas raffinierter werden und die normalen Größenwerte von bytes in etwas Nützlicheres und für die meisten Leute Verständlicheres wie megabytes umwandeln.
SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESWHERE TABLE_SCHEMA = "bookstore"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
In diesem Beispiel mit der Datenbank bookstore kombinieren wir DATA_LENGTH und INDEX_LENGTH als bytes und teilen es dann zweimal durch 1024, um es in kilobytes und dann in megabytes umzuwandeln. Unsere Ergebnismenge sieht dann etwa so aus:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Wenn Sie sich nicht für alle Tabellen in der Datenbank interessieren und nur die Größe einer bestimmten Tabelle wollen, können Sie einfach AND TABLE_NAME = "your_table_name" zur WHERE-Klausel hinzufügen. Hier wollen wir nur Informationen über die Tabelle book:
SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESWHERE TABLE_SCHEMA = "bookstore" AND TABLE_NAME = "book"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
Die Ergebnisse sind nun, wie erwartet, wie folgt:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
Liste aller Tabellengrößen aus allen Datenbanken
Wenn Sie ein Problem haben, bei dem Ihre Datenbank immer größer wird, Sie aber nicht wissen, welche Tabelle der Übeltäter ist, kann es nützlich sein, die Größe aller Tabellen in allen Datenbanken des gesamten Systems abzufragen. Dies lässt sich leicht mit der folgenden Abfrage bewerkstelligen:
SELECT TABLE_SCHEMA AS `Database`, TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
Dies gibt nicht nur die Größe der Tabelle zurück, sondern auch den Tabellennamen und die übergeordnete Datenbank, der sie zugeordnet ist.
Schreibe einen Kommentar