How to Get the Size of a Table in MySQL
On Dezembro 17, 2021 by adminComo a maioria das bases de dados relacionais, o MySQL fornece metadados úteis sobre a base de dados em si. Enquanto a maioria das outras bases de dados referem-se a esta informação como um catalog
, a documentação oficial do MySQL refere-se a INFORMATION_SCHEMA
metadados como tables
.
Independentemente do nome, o que importa é a informação fornecida por estas INFORMATION_SCHEMA
tabelas. Tudo desde views
e user_privilieges
até columns
e tables
pode ser encontrado no arquivo INFORMATION_SCHEMA
. Para os nossos propósitos estamos particularmente interessados nos metadados tables
, que podemos consultar para realmente extrair o tamanho de várias tabelas no sistema.
List Table Sizes From a Single Database
As can seen in the official documentation, the INFORMATION_SCHEMA.TABLES
table contains around 20 columns, but for the purpose of determining the amount of disk space used by tables, we’ll focus on two columns in particular: DATA_LENGTH
e INDEX_LENGTH
.
-
DATA_LENGTH
é o comprimento (ou tamanho) de todos os dados da tabela (embytes
). -
INDEX_LENGTH
é o comprimento (ou tamanho) do arquivo de índice da tabela (também embytes
).
Armado com esta informação, podemos executar uma consulta que listará todas as tabelas em uma base de dados específica juntamente com o espaço em disco (tamanho) de cada uma. Nós podemos até mesmo obter um pouco mais de fantasia 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.TABLESWHERE TABLE_SCHEMA = "bookstore"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
>
Neste exemplo usando o banco de dados bookstore
, estamos combinando os DATA_LENGTH
e INDEX_LENGTH
como bytes
, então dividindo por 1024
duas vezes para converter em kilobytes
e então megabytes
. Nosso conjunto de resultados será algo parecido com isto:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Se você não se importa com todas as tabelas do banco de dados e só quer o tamanho de uma tabela em particular, você pode simplesmente adicionar AND TABLE_NAME = "your_table_name"
à cláusula WHERE
. Aqui só queremos informação sobre a book
tabela:
SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESWHERE TABLE_SCHEMA = "bookstore" AND TABLE_NAME = "book"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
>
Os resultados, como esperado, são agora:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
Listar todos os tamanhos de tabelas de todas as bases de dados
Se você estiver encontrando um problema onde sua base de dados está crescendo em tamanho, mas você não sabe qual tabela é a culpada, pode ser útil consultar o tamanho de todas as tabelas dentro de todas as bases de dados em todo o sistema. Isto 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.TABLESORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
Isto irá retornar não só o tamanho da tabela, mas também o nome da tabela e do banco de dados pai ao qual ela está associada.
Deixe uma resposta