Cum se obține dimensiunea unui tabel în MySQL
On decembrie 17, 2021 by adminCa majoritatea bazelor de date relaționale, MySQL oferă metadate utile despre baza de date în sine. În timp ce majoritatea celorlalte baze de date se referă la aceste informații ca fiind catalog
, documentația oficială MySQL se referă la metadatele INFORMATION_SCHEMA
ca fiind tables
.
Indiferent de nume, ceea ce contează sunt informațiile furnizate de aceste tabele INFORMATION_SCHEMA
. Totul, de la views
și user_privilieges
până la columns
și tables
poate fi găsit în INFORMATION_SCHEMA
. Pentru scopurile noastre, suntem interesați în special de metadatele tables
, pe care le putem interoga pentru a extrage efectiv dimensiunea diferitelor tabele din sistem.
Listul dimensiunilor tabelelor dintr-o singură bază de date
După cum se poate vedea în documentația oficială, tabelul INFORMATION_SCHEMA.TABLES
conține în jur de 20 de coloane, dar în scopul determinării volumului de spațiu pe disc utilizat de tabele, ne vom concentra asupra a două coloane în special: DATA_LENGTH
și INDEX_LENGTH
.
-
DATA_LENGTH
este lungimea (sau dimensiunea tuturor datelor din tabel (înbytes
). -
INDEX_LENGTH
este lungimea (sau dimensiunea) fișierului de index pentru tabel (tot înbytes
).
Înarmați cu aceste informații, putem executa o interogare care va lista toate tabelele dintr-o anumită bază de date împreună cu spațiul pe disc (dimensiunea) fiecăreia. Putem chiar să devenim un pic mai pretențioși și să convertim valorile normale ale dimensiunii din bytes
în ceva mai util și mai ușor de înțeles pentru majoritatea oamenilor, cum ar fi 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;
În acest exemplu, folosind baza de date bookstore
, combinăm DATA_LENGTH
și INDEX_LENGTH
ca bytes
, apoi împărțim de două ori cu 1024
pentru a le converti în kilobytes
și apoi megabytes
. Setul nostru de rezultate va arăta cam așa:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Dacă nu vă pasă de toate tabelele din baza de date și doriți doar dimensiunea unei anumite tabele, puteți adăuga pur și simplu AND TABLE_NAME = "your_table_name"
la clauza WHERE
. Aici dorim doar informații despre tabelul 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;
Rezultatele, așa cum era de așteptat, sunt acum:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
List All Table Sizes From ALL Databases
Dacă vă confruntați cu o problemă în care baza de date crește în dimensiune, dar nu știți ce tabel este vinovat, poate fi util să interogați dimensiunea tuturor tabelelor din toate bazele de date din întregul sistem. Acest lucru poate fi realizat cu ușurință cu următoarea interogare:
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;
Aceasta va returna nu numai dimensiunea tabelului, ci și numele tabelului și baza de date părinte cu care este asociat.
Lasă un răspuns