sql >> Database >  >> RDS >> Mysql

Hoe u de grootte van een tabel in MySQL kunt krijgen

Zoals de meeste relationele databases, biedt MySQL nuttige metadata over de database zelf. Terwijl de meeste andere databases naar deze informatie verwijzen als een catalog , verwijst de officiële MySQL-documentatie naar de INFORMATION_SCHEMA metadata als tables .

Ongeacht de naam, het gaat om de informatie die wordt verstrekt door deze INFORMATION_SCHEMA tafels. Alles van views en user_privilieges naar columns en tables is te vinden in de INFORMATION_SCHEMA . Voor onze doeleinden zijn we vooral geïnteresseerd in de tables metadata, die we kunnen opvragen om de grootte van verschillende tabellen in het systeem daadwerkelijk te extraheren.

Tabelgroottes uit één database weergeven

Zoals te zien is in de officiële documentatie, is de INFORMATION_SCHEMA.TABLES tabel bevat ongeveer 20 kolommen, maar om de hoeveelheid schijfruimte te bepalen die door tabellen wordt gebruikt, richten we ons in het bijzonder op twee kolommen:DATA_LENGTH en INDEX_LENGTH .

  • DATA_LENGTH is de lengte (of grootte) van alle gegevens in de tabel (in bytes ).
  • INDEX_LENGTH is de lengte (of grootte) van het indexbestand voor de tabel (ook in bytes ).

Gewapend met deze informatie kunnen we een query uitvoeren die alle tabellen in een specifieke database samen met de schijfruimte (grootte) van elk zal weergeven. We kunnen zelfs een beetje exclusiever worden en de normale groottewaarden converteren van bytes in iets dat voor de meeste mensen nuttiger en begrijpelijker is, zoals 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;

In dit voorbeeld met de bookstore database, combineren we de DATA_LENGTH en INDEX_LENGTH als bytes , en vervolgens te delen door 1024 tweemaal om te zetten in kilobytes en dan megabytes . Onze resultatenset ziet er ongeveer zo uit:

+----------------------------------+-----------+
| Table                            | Size (MB) |
+----------------------------------+-----------+
| book                             |       267 |
| author                           |        39 |
| post                             |        27 |
| cache                            |        24 |
...

Als u niet om alle tabellen in de database geeft en alleen de grootte van een bepaalde tabel wilt, kunt u eenvoudig AND TABLE_NAME = "your_table_name" toevoegen naar de WHERE clausule. Hier willen we alleen informatie over het book tafel:

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;

De resultaten zijn, zoals verwacht, nu:

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

Lijst alle tabelgroottes van ALLE databases

Als u een probleem tegenkomt waarbij uw database groter wordt, maar u niet weet welke tabel de boosdoener is, kan het handig zijn om de grootte van alle op te vragen. tabellen binnen alle databases in het hele systeem. Dit kan eenvoudig worden bereikt met de volgende vraag:

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;

Dit retourneert niet alleen de grootte van de tabel, maar ook de tabelnaam en de bovenliggende database waaraan deze is gekoppeld.


  1. Meest populaire databasebeheersystemen ter wereld

  2. Hoe MySQL op Ubuntu te installeren en configureren

  3. Hoe de datum en tijd op te maken in MySQL

  4. Homebrew postgres kapot