Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir la taille d'une table dans MySQL

Comme la plupart des bases de données relationnelles, MySQL fournit des métadonnées utiles sur la base de données elle-même. Alors que la plupart des autres bases de données font référence à ces informations en tant que catalog , la documentation officielle de MySQL fait référence au INFORMATION_SCHEMA métadonnées sous forme de tables .

Peu importe le nom, ce qui compte, ce sont les informations fournies par ces INFORMATION_SCHEMA les tables. Tout à partir de views et user_privilieges aux columns et tables peut être trouvé dans le INFORMATION_SCHEMA . Pour nos besoins, nous sommes particulièrement intéressés par les tables métadonnées, que nous pouvons interroger pour extraire réellement la taille des différentes tables du système.

Répertorier les tailles de table à partir d'une seule base de données

Comme on peut le voir dans la documentation officielle, le INFORMATION_SCHEMA.TABLES table contient environ 20 colonnes, mais dans le but de déterminer la quantité d'espace disque utilisée par les tables, nous allons nous concentrer sur deux colonnes en particulier :DATA_LENGTH et INDEX_LENGTH .

  • DATA_LENGTH est la longueur (ou taille) de toutes les données de la table (en bytes ).
  • INDEX_LENGTH est la longueur (ou la taille) du fichier d'index de la table (également en bytes ).

Armés de ces informations, nous pouvons exécuter une requête qui listera toutes les tables d'une base de données spécifique avec l'espace disque (taille) de chacune. Nous pouvons même devenir un peu plus sophistiqués et convertir les valeurs de taille normale à partir de bytes en quelque chose de plus utile et compréhensible pour la plupart des gens comme 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;

Dans cet exemple utilisant la bookstore base de données, nous combinons les DATA_LENGTH et INDEX_LENGTH comme bytes , puis en le divisant par 1024 deux fois convertir en kilobytes puis megabytes . Notre ensemble de résultats ressemblera à ceci :

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

Si vous ne vous souciez pas de toutes les tables de la base de données et que vous ne voulez que la taille d'une table particulière, vous pouvez simplement ajouter AND TABLE_NAME = "your_table_name" au WHERE clause. Ici, nous ne voulons que des informations sur le book tableau :

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;

Les résultats, comme prévu, sont maintenant :

+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| book  |       267 |
+-------+-----------+
1 row in set (0.00 sec)

Répertorier toutes les tailles de table de TOUTES les bases de données

Si vous rencontrez un problème où votre base de données augmente en taille mais que vous ne savez pas quelle table est le coupable, il peut être utile d'interroger la taille de tous tableaux dans tous bases de données dans tout le système. Cela peut être accompli facilement avec la requête suivante :

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;

Cela renverra non seulement la taille de la table, mais également le nom de la table et la base de données parente à laquelle elle est associée.