How to Get the Size of a Table in MySQL
On 17 joulukuun, 2021 by adminKuten useimmat relaatiotietokannat, MySQL tarjoaa hyödyllisiä metatietoja tietokannasta itsestään. Kun useimmat muut tietokannat viittaavat näihin tietoihin nimellä catalog
, MySQL:n virallisessa dokumentaatiossa INFORMATION_SCHEMA
-metatietoihin viitataan nimellä tables
.
Nimestä riippumatta tärkeintä on näiden INFORMATION_SCHEMA
-taulujen tarjoama tieto. Kaikki views
:stä ja user_privilieges
:sta columns
:een ja tables
:een löytyy INFORMATION_SCHEMA
:sta. Meidän tarkoituksiamme varten olemme erityisen kiinnostuneita tables
-metatiedoista, joita voimme kysyä, jotta voimme itse asiassa poimia järjestelmän eri taulujen koon.
List Table Sizes From a Single Database
Kuten virallisesta dokumentaatiosta käy ilmi, INFORMATION_SCHEMA.TABLES
-taulu sisältää noin 20 saraketta, mutta taulukoiden käyttämän levytilan määrän määrittämiseksi keskitymme erityisesti kahteen sarakkeeseen: DATA_LENGTH
ja INDEX_LENGTH
.
-
DATA_LENGTH
on taulun kaikkien tietojen pituus (tai koko) (yksikössäbytes
). -
INDEX_LENGTH
on taulun indeksitiedoston pituus (tai koko) (niin ikään yksikössäbytes
).
Näillä tiedoilla varustautuneena voimme suorittaa kyselyn, jossa luetellaan kaikki tietyn tietokannan taulukot sekä kunkin taulukon levytila (koko). Voimme jopa mennä hieman hienostuneemmiksi ja muuntaa normaalit kokoarvot bytes
:sta joksikin hyödyllisemmäksi ja ymmärrettävämmäksi useimmille ihmisille, kuten 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;
Tässä esimerkissä, jossa käytämme bookstore
-tietokantaa, yhdistämme DATA_LENGTH
:n ja INDEX_LENGTH
:n arvot bytes
:ksi, ja jaamme ne sitten kahdesti 1024
:llä, jotta ne voidaan muuntaa kilobytes
:ksi ja sen jälkeen vielä megabytes
:ksi. Tulosjoukkomme näyttää jotakuinkin tältä:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Jos et välitä tietokannan kaikista taulukoista ja haluat vain tietyn taulukon koon, voit yksinkertaisesti lisätä AND TABLE_NAME = "your_table_name"
WHERE
-lausekkeeseen. Tässä halutaan tietoja vain book
-taulusta:
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;
Tulokset ovat nyt odotetusti seuraavat:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
Lista kaikkien taulukoiden koot KAIKISTA tietokannoista
Jos olet törmännyt ongelmaan, jossa tietokantasi koko kasvaa, mutta et tiedä, mikä taulukko on syyllinen, voi olla hyödyllistä kysyä koko järjestelmän kaikkien tietokantojen kaikkien taulukoiden kokoa. Tämä onnistuu helposti seuraavalla kyselyllä:
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;
Tämä palauttaa taulun koon lisäksi myös taulun nimen ja emotietokannan, johon se liittyy.
Vastaa