Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como obter o tamanho de uma tabela no MySQL


Como a maioria dos bancos de dados relacionais, o MySQL fornece metadados úteis sobre o próprio banco de dados. Enquanto a maioria dos outros bancos de dados se referem a essas informações como um catalog , a documentação oficial do MySQL se refere ao INFORMATION_SCHEMA metadados como tables .

Independentemente do nome, o que importa são as informações fornecidas por estes INFORMATION_SCHEMA mesas. Tudo de views e user_privilieges para columns e tables pode ser encontrado no INFORMATION_SCHEMA . Para nossos propósitos, estamos particularmente interessados ​​nas tables metadados, que podemos consultar para realmente extrair o tamanho de várias tabelas no sistema.

Listar tamanhos de tabela de um único banco de dados


Como pode ser visto na documentação oficial, o INFORMATION_SCHEMA.TABLES table contém cerca de 20 colunas, mas para determinar a quantidade de espaço em disco usado pelas tabelas, vamos nos concentrar em duas colunas em particular:DATA_LENGTH e INDEX_LENGTH .
  • DATA_LENGTH é o comprimento (ou tamanho) de todos os dados na tabela (em bytes ).
  • INDEX_LENGTH é o comprimento (ou tamanho) do arquivo de índice para a tabela (também em bytes ).

De posse dessas informações, podemos executar uma consulta que listará todas as tabelas de um banco de dados específico juntamente com o espaço em disco (tamanho) de cada uma. Podemos até ficar um pouco mais sofisticados e converter os valores de tamanho normal de bytes em algo mais útil e compreensível para a maioria das pessoas como 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;

Neste exemplo usando a bookstore banco de dados, estamos combinando o DATA_LENGTH e INDEX_LENGTH como bytes , dividindo-o por 1024 duas vezes para converter em kilobytes e então megabytes . Nosso conjunto de resultados ficará mais ou menos assim:
+----------------------------------+-----------+
| Table                            | Size (MB) |
+----------------------------------+-----------+
| book                             |       267 |
| author                           |        39 |
| post                             |        27 |
| cache                            |        24 |
...

Se você não se importa com todas as tabelas no banco de dados e deseja apenas o tamanho de uma tabela específica, basta adicionar AND TABLE_NAME = "your_table_name" para WHERE cláusula. Aqui queremos apenas informações sobre o book tabela:
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;

Os resultados, como esperado, agora são:
+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| book  |       267 |
+-------+-----------+
1 row in set (0.00 sec)

Listar todos os tamanhos de tabela de TODOS os bancos de dados


Se você estiver enfrentando um problema em que seu banco de dados está crescendo em tamanho, mas não sabe qual tabela é a culpada, pode ser útil consultar o tamanho de todos tabelas dentro de todos bancos de dados em todo o sistema. Isso pode ser feito facilmente com a seguinte consulta:
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;

Isso retornará não apenas o tamanho da tabela, mas também o nome da tabela e o banco de dados pai ao qual ela está associada.