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_LENGTHje délka (nebo velikost) všech dat v tabulce (vbytes). -
INDEX_LENGTHje 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ář