sql >> Databáze >  >> RDS >> Mysql

Jak získat velikost tabulky v MySQL

Jako většina relačních databází poskytuje MySQL užitečná metadata o databázi samotné. Zatímco většina ostatních databází tyto informace označuje jako catalog , oficiální dokumentace MySQL odkazuje na INFORMATION_SCHEMA metadata jako tables .

Bez ohledu na název jsou důležité informace poskytované těmito INFORMATION_SCHEMA tabulky. Vše z views a user_privilieges do columns a tables lze nalézt v INFORMATION_SCHEMA . Pro naše účely nás zajímají zejména tables metadata, na která se můžeme dotazovat, abychom skutečně extrahovali velikost různých tabulek v systému.

Seznam velikostí tabulek z jedné databáze

Jak je vidět v oficiální dokumentaci, INFORMATION_SCHEMA.TABLES tabulka obsahuje přibližně 20 sloupců, ale pro účely určení množství místa na disku používaného tabulkami 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 (v bytes ).
  • INDEX_LENGTH je délka (nebo velikost) indexového souboru pro tabulku (také v bytes ).

Vyzbrojeni těmito informacemi můžeme provést dotaz, který zobrazí seznam všech tabulek v konkrétní databázi spolu s místem na disku (velikost) každé z nich. Můžeme se dokonce trochu zdokonalit a převést hodnoty normální velikosti z bytes do něčeho užitečnějšího a srozumitelnějšího pro většinu lidí, jako jsou megabytes .

SELECT
  TABLE_NAME AS `Table`,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
  information_schema.TABLES
WHERE
  TABLE_SCHEMA = "bookstore"
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

V tomto příkladu pomocí bookstore databáze, kombinujeme DATA_LENGTH a INDEX_LENGTH jako bytes a poté jej vydělte 1024 dvakrát převést na kilobytes a poté megabytes . Naše sada výsledků 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 WHERE doložka. Zde chceme pouze informace o book tabulka:

SELECT
  TABLE_NAME AS `Table`,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
  information_schema.TABLES
WHERE
    TABLE_SCHEMA = "bookstore"
  AND
    TABLE_NAME = "book"
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

Výsledky, jak se očekávalo, jsou nyní:

+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| book  |       267 |
+-------+-----------+
1 row in set (0.00 sec)

Vypsat všechny velikosti tabulek ze VŠECH databází

Pokud narazíte na problém, kdy se vaše databáze zvětšuje, ale nevíte, která tabulka je na vině, může být užitečné zeptat se na velikost všech tabulky v rámci všech databáze v celém systému. To lze snadno provést pomocí následujícího dotazu:

SELECT
  TABLE_SCHEMA AS `Database`,
  TABLE_NAME AS `Table`,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
  information_schema.TABLES
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

Tím se vrátí nejen velikost tabulky, ale také název tabulky a nadřazená databáze, ke které je přidružena.


  1. Proč došlo k selhání databáze MySQL? Získejte přehled s novým rámcem MySQL Freeze Frame

  2. Jak se vyhnout chybám při mutování tabulky

  3. Vygenerujte sadu výsledků s narůstajícími daty v TSQL

  4. Jak resetuji sekvenci v Oracle?