sql >> Base de Datos >  >> RDS >> Mysql

Cómo obtener el tamaño de una tabla en MySQL

Como 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 un catalog , la documentación oficial de MySQL hace referencia a INFORMATION_SCHEMA metadatos como tables .

Independientemente del nombre, lo que importa es la información proporcionada por estos INFORMATION_SCHEMA mesas. Todo desde views y user_privilieges a columns y tables se puede encontrar en el INFORMATION_SCHEMA . Para nuestros propósitos, estamos particularmente interesados ​​en las tables metadatos, que podemos consultar para extraer realmente el tamaño de varias tablas en el sistema.

Lista de tamaños de tablas de una sola base de datos

Como se puede ver en la documentación oficial, el INFORMATION_SCHEMA.TABLES La tabla contiene alrededor de 20 columnas, pero con el fin 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 (en bytes ).
  • INDEX_LENGTH es la longitud (o tamaño) del archivo de índice de la tabla (también en bytes ).

Armados con esta información, podemos ejecutar una consulta que enumerará todas las tablas en 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 normal de bytes en algo más útil y comprensible para la mayoría de las personas 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;

En este ejemplo usando la bookstore base de datos, estamos combinando DATA_LENGTH y INDEX_LENGTH como bytes , luego dividiéndolo por 1024 dos veces para convertir en kilobytes y luego megabytes . Nuestro conjunto de resultados se verá así:

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

Si no le interesan todas las tablas de la base de datos y solo quiere el tamaño de una tabla en particular, simplemente puede agregar AND TABLE_NAME = "your_table_name" al WHERE cláusula. Aquí solo queremos información sobre el book tabla:

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;

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 tabla de TODAS las bases de datos

Si se encuentra con un problema en el que su base de datos crece en tamaño pero no sabe qué tabla es la culpable, puede ser útil consultar el tamaño de todas. tablas dentro de todas 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.TABLES
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

Esto devolverá no solo 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.