Jak zjistit velikost tabulky v MySQL
On 17 prosince, 2021 by adminStejně jako většina relačních databází poskytuje MySQL užitečná metadata o samotné databázi. Zatímco většina ostatních databází označuje tyto informace jako catalog
, oficiální dokumentace MySQL označuje metadata INFORMATION_SCHEMA
jako tables
.
Nezáleží na názvu, důležité jsou informace, které tyto tabulky INFORMATION_SCHEMA
poskytují. V tabulkách INFORMATION_SCHEMA
lze nalézt vše od views
a user_privilieges
až po columns
a tables
. Pro naše účely nás zajímají zejména metadata tables
, na která se můžeme dotazovat, abychom skutečně získali velikost různých tabulek v systému.
Seznam velikostí tabulek z jedné databáze
Jak je vidět v oficiální dokumentaci, tabulka INFORMATION_SCHEMA.TABLES
obsahuje přibližně 20 sloupců, ale pro účely zjištění množství místa na disku, které tabulky využívají, se zaměříme zejména na dva sloupce: DATA_LENGTH
a INDEX_LENGTH
.
-
DATA_LENGTH
je délka (nebo velikost) všech dat v tabulce (vbytes
). -
INDEX_LENGTH
je délka (nebo velikost) indexového souboru pro tabulku (také vbytes
).
S těmito informacemi můžeme provést dotaz, který vypíše všechny tabulky v konkrétní databázi spolu s diskovým prostorem (velikostí) každé z nich. Můžeme být dokonce trochu fantasknější a převést běžné hodnoty velikosti z bytes
na něco užitečnějšího a pro většinu lidí srozumitelnějšího, například 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;
V tomto příkladu s použitím databáze bookstore
spojíme DATA_LENGTH
a INDEX_LENGTH
jako bytes
, pak je dvakrát vydělíme 1024
a převedeme na kilobytes
a pak megabytes
. Naše výsledná sada bude vypadat nějak takto:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Pokud vás nezajímají všechny tabulky v databázi a chcete pouze velikost konkrétní tabulky, můžete jednoduše přidat AND TABLE_NAME = "your_table_name"
do klauzule WHERE
. Zde chceme pouze informace o tabulce 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;
Výsledky jsou nyní podle očekávání následující:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
Seznam všech velikostí tabulek ze VŠECH databází
Pokud se setkáváte s problémem, kdy vám roste velikost databáze, ale nevíte, která tabulka je viníkem, může se vám hodit dotaz na velikost všech tabulek v rámci všech databází v celém systému. Toho lze snadno dosáhnout následujícím dotazem:
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;
Tento dotaz vrátí nejen velikost tabulky, ale také název tabulky a nadřazenou databázi, ke které je přiřazena.
.
Napsat komentář