How to Get the Size of a Table in MySQL
On december 17, 2021 by adminZoals de meeste relationele databases, levert MySQL nuttige metadata over de database zelf. Terwijl de meeste andere databases naar deze informatie verwijzen als een catalog
, verwijst de officiële MySQL documentatie naar de INFORMATION_SCHEMA
metadata als tables
.
Of de naam, waar het om gaat is de informatie die door deze INFORMATION_SCHEMA
tabellen wordt verstrekt. Alles van views
en user_privilieges
tot columns
en tables
kan worden gevonden in de INFORMATION_SCHEMA
. Voor onze doeleinden zijn we vooral geïnteresseerd in de tables
metadata, die we kunnen opvragen om daadwerkelijk de grootte van verschillende tabellen in het systeem te extraheren.
List Table Sizes From a Single Database
Zoals te zien is in de officiële documentatie, bevat de INFORMATION_SCHEMA.TABLES
tabel ongeveer 20 kolommen, maar voor het doel van het bepalen van de hoeveelheid schijfruimte die wordt gebruikt door tabellen, zullen we ons richten op twee kolommen in het bijzonder: DATA_LENGTH
en INDEX_LENGTH
.
-
DATA_LENGTH
is de lengte (of grootte) van alle gegevens in de tabel (inbytes
). -
INDEX_LENGTH
is de lengte (of grootte) van het indexbestand voor de tabel (ook inbytes
).
Wapend met deze informatie, kunnen we een query uitvoeren die alle tabellen in een specifieke database zal opsommen, samen met de schijfruimte (grootte) van elk. We kunnen zelfs een beetje chiquer worden en de normale groottewaarden uit bytes
omzetten in iets bruikbaarders en begrijpelijkers voor de meeste mensen, zoals megabytes
.
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 dit voorbeeld met de bookstore
database, combineren we de DATA_LENGTH
en INDEX_LENGTH
als bytes
, dan delen we het twee keer door 1024
om het om te zetten in kilobytes
en dan megabytes
. Onze resultatenverzameling ziet er dan ongeveer zo uit:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Als u niet geïnteresseerd bent in alle tabellen in de database en alleen de grootte van een bepaalde tabel wilt, kunt u eenvoudig AND TABLE_NAME = "your_table_name"
toevoegen aan de WHERE
-clausule. Hier willen we alleen informatie over de book
tabel:
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;
De resultaten zijn, zoals verwacht, nu:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
List All Table Sizes From ALL Databases
Als u tegen een probleem aanloopt waarbij uw database steeds groter wordt, maar u niet weet welke tabel de boosdoener is, kan het nuttig zijn om de grootte van alle tabellen in alle databases in het hele systeem op te vragen. Dit kan eenvoudig worden gedaan met de volgende query:
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;
Hiermee krijgt u niet alleen de grootte van de tabel te zien, maar ook de tabelnaam en de bovenliggende database waaraan de tabel is gekoppeld.
Geef een antwoord