Cómo obtener el tamaño de una tabla en MySQL
On diciembre 17, 2021 by adminComo la mayoría de las bases de datos relacionales, MySQL proporciona metadatos útiles sobre la propia base de datos. Mientras que la mayoría de las otras bases de datos se refieren a esta información como catalog
, la documentación oficial de MySQL se refiere a los metadatos INFORMATION_SCHEMA
como tables
.
Independientemente del nombre, lo que importa es la información proporcionada por estas tablas INFORMATION_SCHEMA
. Todo, desde views
y user_privilieges
hasta columns
y tables
se puede encontrar en las INFORMATION_SCHEMA
. Para nuestros propósitos estamos particularmente interesados en los metadatos de tables
, que podemos consultar para extraer realmente el tamaño de varias tablas del sistema.
Lista de tamaños de tablas de una sola base de datos
Como se puede ver en la documentación oficial, la tabla INFORMATION_SCHEMA.TABLES
contiene alrededor de 20 columnas, pero para el propósito de determinar la cantidad de espacio en disco utilizado por las tablas, nos centraremos en dos columnas en particular: DATA_LENGTH
y INDEX_LENGTH
.
-
DATA_LENGTH
es la longitud (o tamaño) de todos los datos de la tabla (enbytes
). -
INDEX_LENGTH
es la longitud (o tamaño) del archivo de índice de la tabla (también enbytes
).
Armados con esta información, podemos ejecutar una consulta que listará todas las tablas de una base de datos específica junto con el espacio en disco (tamaño) de cada una. Incluso podemos ser un poco más sofisticados y convertir los valores de tamaño normales de bytes
en algo más útil y comprensible para la mayoría de la gente 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;
En este ejemplo utilizando la base de datos bookstore
, estamos combinando el DATA_LENGTH
y INDEX_LENGTH
como bytes
, luego dividiéndolo por 1024
dos veces para convertirlo en kilobytes
y luego megabytes
. Nuestro conjunto de resultados se parecerá a esto:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Si no te importan todas las tablas de la base de datos y sólo quieres el tamaño de una tabla en particular, puedes simplemente añadir AND TABLE_NAME = "your_table_name"
a la cláusula WHERE
. Aquí sólo queremos información sobre la tabla book
:
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;
Los resultados, como se esperaba, son ahora:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
Lista de todos los tamaños de las tablas de TODAS las bases de datos
Si te encuentras con un problema en el que tu base de datos está creciendo en tamaño pero no sabes qué tabla es la culpable, puede ser útil consultar el tamaño de todas las tablas dentro de todas las bases de datos en todo el sistema. Esto se puede lograr fácilmente con la siguiente 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;
Esto devolverá no sólo el tamaño de la tabla, sino también el nombre de la tabla y la base de datos principal a la que está asociada.
Deja una respuesta