sql >> Database teknologi >  >> RDS >> Mysql

Sådan får du størrelsen på en tabel i MySQL

Som de fleste relationelle databaser giver MySQL nyttige metadata om selve databasen. Mens de fleste andre databaser henviser til disse oplysninger som et catalog , henviser den officielle MySQL-dokumentation til INFORMATION_SCHEMA metadata som tables .

Uanset navnet, er det vigtige oplysningerne fra disse INFORMATION_SCHEMA tabeller. Alt fra views og user_privilieges til columns og tables kan findes i INFORMATION_SCHEMA . Til vores formål er vi særligt interesserede i tables metadata, som vi kan forespørge for faktisk at udtrække størrelsen af ​​forskellige tabeller i systemet.

Liste tabelstørrelser fra en enkelt database

Som det kan ses i den officielle dokumentation, er INFORMATION_SCHEMA.TABLES tabel indeholder omkring 20 kolonner, men med det formål at bestemme mængden af ​​diskplads, der bruges af tabeller, vil vi fokusere på især to kolonner:DATA_LENGTH og INDEX_LENGTH .

  • DATA_LENGTH er længden (eller størrelsen) af alle data i tabellen (i bytes ).
  • INDEX_LENGTH er længden (eller størrelsen) af indeksfilen for tabellen (også i bytes ).

Bevæbnet med disse oplysninger kan vi udføre en forespørgsel, der viser alle tabeller i en specifik database sammen med diskpladsen (størrelsen) af hver. Vi kan endda blive en smule mere avancerede og konvertere de normale størrelsesværdier fra bytes til noget mere nyttigt og forståeligt for de fleste mennesker som 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;
 

I dette eksempel ved hjælp af bookstore databasen, kombinerer vi DATA_LENGTH og INDEX_LENGTH som bytes , og derefter dividere det med 1024 to gange at konvertere til kilobytes og derefter megabytes . Vores resultatsæt vil se nogenlunde således ud:

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

Hvis du er ligeglad med alle tabeller i databasen og kun ønsker størrelsen på en bestemt tabel, kan du blot tilføje AND TABLE_NAME = "your_table_name" til WHERE klausul. Her ønsker vi kun information om book tabel:

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;
 

Resultaterne er som forventet nu:

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

Vis alle tabelstørrelser fra ALLE databaser

Hvis du støder på et problem, hvor din database vokser i størrelse, men du ikke ved, hvilken tabel der er synderen, kan det være nyttigt at forespørge efter størrelsen på alle tabeller i alle databaser i hele systemet. Dette kan nemt opnås med følgende forespørgsel:

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;
 

Dette returnerer ikke kun størrelsen af ​​tabellen, men også tabelnavnet og den overordnede database, den er knyttet til.


  1. Ydeevneværdi af COMB guider

  2. SQL count(*) ydeevne

  3. MySQL Opret visning, Erstat visning og slip visningserklæringer med eksempler

  4. Sådan udføres opdateringsoperationer på kolonner af typen JSONB i Postgres 9.4