Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите размера на таблица в MySQL

Подобно на повечето релационни бази данни, MySQL предоставя полезни метаданни за самата база данни. Докато повечето други бази данни се отнасят към тази информация като catalog , официалната документация на MySQL се отнася до INFORMATION_SCHEMA метаданни като tables .

Независимо от името, това, което има значение, е информацията, предоставена от тези INFORMATION_SCHEMA маси. Всичко от views и user_privilieges към columns и tables може да се намери в INFORMATION_SCHEMA . За нашите цели се интересуваме особено от tables метаданни, които можем да поискаме, за да извлечем действително размера на различни таблици в системата.

Списък с размери на таблици от една база данни

Както може да се види в официалната документация, INFORMATION_SCHEMA.TABLES таблицата съдържа около 20 колони, но с цел определяне на количеството дисково пространство, използвано от таблиците, ще се съсредоточим върху две колони по-специално:DATA_LENGTH и INDEX_LENGTH .

  • DATA_LENGTH е дължината (или размера) на всички данни в таблицата (в bytes ).
  • INDEX_LENGTH е дължината (или размерът) на индексния файл за таблицата (също в bytes). ).

Въоръжени с тази информация, можем да изпълним заявка, която ще изброи всички таблици в конкретна база данни заедно с дисковото пространство (размер) на всяка. Можем дори да станем малко по-изискани и да преобразуваме стойностите на нормалния размер от bytes в нещо по-полезно и разбираемо за повечето хора като 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;

В този пример с помощта на bookstore база данни, ние комбинираме DATA_LENGTH и INDEX_LENGTH като bytes , след което се разделя на 1024 два пъти за конвертиране в kilobytes и след това megabytes . Нашият набор от резултати ще изглежда така:

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

Ако не ви пука за всички таблици в базата данни и искате само размера на конкретна таблица, можете просто да добавите AND TABLE_NAME = "your_table_name" до WHERE клауза. Тук искаме само информация за book таблица:

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;

Резултатите, както се очакваше, сега са:

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

Избройте всички размери на таблици от ВСИЧКИ бази данни

Ако се сблъскате с проблем, при който вашата база данни нараства по размер, но не знаете коя таблица е виновникът, може да е полезно да потърсите размера на всички таблици ввсички бази данни в цялата система. Това може да бъде постигнато лесно със следната заявка:

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;

Това ще върне не само размера на таблицата, но и името на таблицата и родителската база данни, с които е свързана.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL уникален въпрос за чувствителност на главни и малки букви

  2. Изберете всички колони с изключение на една в MySQL?

  3. Как да конвертирате MySQL време

  4. SQLAlchemy ПРИ АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ

  5. Изчислете децил от актуалност в MySQL