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_LENGTH
ist die Länge (oder Größe) aller Daten in der Tabelle (inbytes
). -
INDEX_LENGTH
ist 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