Comment obtenir la taille d’une table dans MySQL
On décembre 17, 2021 by adminComme 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 aux métadonnées INFORMATION_SCHEMA
en tant que tables
.
Qu’importe le nom, ce qui compte, ce sont les informations fournies par ces tables INFORMATION_SCHEMA
. Tout, de views
et user_privilieges
à columns
et tables
, peut être trouvé dans les INFORMATION_SCHEMA
. Pour nos besoins, nous sommes particulièrement intéressés par les métadonnées tables
, que nous pouvons interroger pour extraire réellement la taille des diverses tables du système.
Lister les tailles des tables à partir d’une seule base de données
Comme on peut le voir dans la documentation officielle, la table INFORMATION_SCHEMA.TABLES
contient environ 20 colonnes, mais pour 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 la taille) de toutes les données de la table (enbytes
). -
INDEX_LENGTH
est la longueur (ou la taille) du fichier d’index de la table (également enbytes
).
Munis de ces informations, nous pouvons exécuter une requête qui listera toutes les tables d’une base de données spécifique ainsi que l’espace disque (taille) de chacune. Nous pouvons même être un peu plus fantaisistes et convertir les valeurs de taille normales 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.TABLESWHERE TABLE_SCHEMA = "bookstore"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
Dans cet exemple utilisant la base de données bookstore
, nous combinons les DATA_LENGTH
et INDEX_LENGTH
comme bytes
, puis nous les divisons par 1024
deux fois pour les convertir en kilobytes
puis megabytes
. Notre ensemble de résultats ressemblera à quelque chose comme 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 voulez seulement la taille d’une table particulière, vous pouvez simplement ajouter AND TABLE_NAME = "your_table_name"
à la clause WHERE
. Ici, nous voulons seulement des informations sur la table 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;
Les résultats, comme prévu, sont maintenant :
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
Liste de 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 de demander la taille de toutes les tables dans toutes les bases de données du système entier. Ceci 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.TABLESORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
Cela renverra non seulement la taille de la table, mais aussi le nom de la table et la base de données parente à laquelle elle est associée.
Laisser un commentaire