Como listar o tamanho das tabelas no SQL Server e no MySQL
Para quem trabalha com muitos dados, pode ser interessante fazer backup de tabelas muito grandes, de modo a melhorar o desempenho.
Se você por exemplo tem uma tabela que recebe uma grande quantidade de dados por dia, como uma tabela de log, pode considerar fazer periodicamente uma cópia para esvaziar a tabela, deixando apenas os registros mais recentes.
Outra necessidade que você pode ter é saber quais as tabelas com a maior quantidade de registros.
Vamos ver scripts que permitem obter estas informações no SQL Server e no MySQL
O primeiro script que vamos ver é para o SQL Server.
O script abaixo ajuda nestas duas situações, ele mostra o tamanho das tabelas e a quantidade de registros.
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME NOT LIKE dt%
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
t.Name
Agora vamos ver como fazer o mesmo utilizando o MySQL
SELECT
TABLE_NAME AS `Tabela`,
TABLE_ROWS as Registros,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Tamanho (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "NOME_DO_BANCO_DE_DADOS"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;