Hvordan får du størrelsen af en tabel i MySQL
On december 17, 2021 by adminSom de fleste relationelle databaser giver MySQL nyttige metadata om selve databasen. Mens de fleste andre databaser henviser til disse oplysninger som en catalog
, henviser den officielle MySQL-dokumentation til INFORMATION_SCHEMA
-metadataene som tables
.
Uanset navnet er det, der betyder noget, de oplysninger, der leveres af disse INFORMATION_SCHEMA
-tabeller. Alt fra views
og user_privilieges
til columns
og tables
kan findes i INFORMATION_SCHEMA
. Til vores formål er vi især interesseret i tables
-metadata, som vi kan forespørge på for rent faktisk at udtrække størrelsen af forskellige tabeller i systemet.
Liste over tabelstørrelser fra en enkelt database
Som det fremgår af den officielle dokumentation, indeholder INFORMATION_SCHEMA.TABLES
-tabellen omkring 20 kolonner, men med henblik på at bestemme mængden af diskplads, der bruges af tabeller, vil vi især fokusere på to kolonner: DATA_LENGTH
og INDEX_LENGTH
.
-
DATA_LENGTH
er længden (eller størrelsen) af alle data i tabellen (ibytes
). -
INDEX_LENGTH
er længden (eller størrelsen) af indeksfilen for tabellen (også ibytes
).
Med disse oplysninger kan vi udføre en forespørgsel, der viser alle tabeller i en bestemt database sammen med diskpladsen (størrelsen) for hver enkelt. Vi kan endda blive lidt finere og konvertere de normale størrelsesværdier fra bytes
til noget mere nyttigt og forståeligt for de fleste mennesker som 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;
I dette eksempel med bookstore
-databasen kombinerer vi DATA_LENGTH
og INDEX_LENGTH
som bytes
og dividerer det derefter med 1024
to gange for at konvertere til kilobytes
og derefter megabytes
. Vores resultatsæt vil se nogenlunde sådan ud:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Hvis du er ligeglad med alle tabeller i databasen og kun ønsker størrelsen af en bestemt tabel, kan du blot tilføje AND TABLE_NAME = "your_table_name"
til WHERE
-klausulen. Her ønsker vi kun oplysninger om tabellen 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;
Resultaterne er som forventet nu:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
List All Table Sizes From ALL Databases
Hvis du løber ind i et problem, hvor din database vokser i størrelse, men du ikke ved, hvilken tabel der er synderen, kan det være nyttigt at forespørge efter størrelsen af alle tabeller i alle databaser i hele systemet. Dette kan nemt gøres med følgende forespørgsel:
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;
Dette returnerer ikke kun størrelsen på tabellen, men også tabellens navn og den overordnede database, som den er tilknyttet.
Skriv et svar