Je peux exécuter cette requête pour obtenir la taille de toutes les tables d'une base de données MySQL:
show table status from myDatabaseName;
J'aimerais avoir de l'aide pour comprendre les résultats. Je cherche des tables avec les plus grandes tailles.
Quelle colonne dois-je regarder?
Vous pouvez utiliser cette requête pour afficher la taille d'une table (bien que vous deviez d'abord remplacer les variables):
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
AND table_name = "$TABLE_NAME";
ou cette requête pour lister la taille de chaque table dans chaque base de données, la plus grande en premier:
SELECT
table_schema as `Database`,
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;
SELECT TABLE_NAME AS "Table Name",
table_rows AS "Quant of Rows", ROUND( (
data_length + index_length
) /1024, 2 ) AS "Total Size Kb"
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'YOUR SCHEMA NAME/DATABASE NAME HERE'
LIMIT 0 , 30
Vous pouvez obtenir le nom du schéma dans la colonne "information_schema" -> SCHEMATA -> "SCHEMA_NAME"
Additional Vous pouvez obtenir size des bases de données mysql comme suit.
SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
Résultat
DB Name | DB Size in MB
mydatabase_wrdp 39.1
information_schema 0.0
Vous pouvez obtenir des détails supplémentaires ici.
SELECT
table_name AS "Table",
round(((data_length + index_length) / 1024 / 1024), 2) as size
FROM information_schema.TABLES
WHERE table_schema = "YOUR_DATABASE_NAME"
ORDER BY size DESC;
Cela trie les tailles (taille de la base de données en Mo).
Si vous souhaitez qu'une requête utilise la base de données actuellement sélectionnée. il suffit de copier/coller cette requête. (Aucune modification requise)
SELECT table_name ,
round(((data_length + index_length) / 1024 / 1024), 2) as SIZE_MB
FROM information_schema.TABLES
WHERE table_schema = DATABASE() ORDER BY SIZE_MB DESC;
Il existe un moyen simple d’obtenir de nombreuses informations à l’aide de Workbench:
Cliquez avec le bouton droit sur le nom du schéma, puis cliquez sur "Inspecteur de schéma".
Dans la fenêtre résultante, vous avez plusieurs onglets. Le premier onglet "Info" affiche une estimation approximative de la taille de la base de données en Mo.
Le deuxième onglet, "Tableaux", indique la longueur des données et d’autres détails pour chaque tableau.
Supposons que votre nom de base de données est"news_alert".Ensuite, cette requête affichera la taille de toutes les tables de la base de données.
Taille de toutes les tables:
SELECT
TABLE_NAME AS `Table`,
ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "news_alert"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Sortie:
+---------+-----------+
| Table | Size (MB) |
+---------+-----------+
| news | 0.08 |
| keyword | 0.02 |
+---------+-----------+
2 rows in set (0.00 sec)
Pour un tableau spécifique:
SELECT
TABLE_NAME AS `Table`,
ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "news_alert"
AND
TABLE_NAME = "news"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Sortie:
+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| news | 0.08 |
+-------+-----------+
1 row in set (0.00 sec)
Si vous utilisez phpmyadmin, allez simplement dans la structure de la table
par exemple.
Space usage
Data 1.5 MiB
Index 0 B
Total 1.5 Mi
Voici une autre façon de résoudre ce problème en utilisant la ligne de commande bash.
for i in
mysql -NB -e 'show databases'
; echo $ i; mysql -e "SELECT nom_table AS 'Tables', tour (((longueur_données + longueur_index))/1024/1024), 2) 'Taille en Mo' FROM information_schema.TABLES WHERE table_schema = \" $ i\"ORDER BY (data_length + longueur_index) DESC "; done </ code>
Adapté de la réponse de ChapMic pour répondre à mes besoins particuliers.
Spécifiez uniquement le nom de votre base de données, puis triez toutes les tables dans l'ordre décroissant - de la plus grande à la plus petite table dans la base de données sélectionnée. Ne nécessite que 1 variable à remplacer = votre nom de base de données.
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) AS `size`
FROM information_schema.TABLES
WHERE table_schema = "YOUR_DATABASE_NAME_HERE"
ORDER BY size DESC;
Une autre façon de montrer le nombre de lignes et l’espace occupé et de les classer.
SELECT
table_schema as `Database`,
table_name AS `Table`,
table_rows AS "Quant of Rows",
round(((data_length + index_length) / 1024 / 1024/ 1024), 2) `Size in GB`
FROM information_schema.TABLES
WHERE table_schema = 'yourDatabaseName'
ORDER BY (data_length + index_length) DESC;
La seule chaîne que vous devez substituer dans cette requête est "yourDatabaseName".
Je trouve que les réponses existantes ne donnent pas réellement la taille des tables sur le disque, ce qui est plus utile. Cette requête donne une estimation plus précise du disque par rapport à la taille de la table basée sur data_length & index. J'ai dû utiliser cela pour une instance AWS RDS où vous ne pouvez pas examiner physiquement le disque et vérifier la taille des fichiers.
select NAME as TABLENAME,FILE_SIZE/(1024*1024*1024) as ACTUAL_FILE_SIZE_GB
, round(((data_length + index_length) / 1024 / 1024/1024), 2) as REPORTED_TABLE_SIZE_GB
from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES s
join INFORMATION_SCHEMA.TABLES t
on NAME = Concat(table_schema,'/',table_name)
order by FILE_SIZE desc
Si vous avez un accès ssh
, vous pouvez aussi essayer simplement du -hc /var/lib/mysql
(ou un autre datadir
, comme défini dans votre my.cnf
).
Calculez la taille totale de la base de données à la fin:
(SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
)
UNION ALL
(SELECT
'TOTAL:',
SUM(round(((data_length + index_length) / 1024 / 1024), 2) )
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
)
cela devrait être testé dans mysql, pas postgresql
SELECT table_schema, # "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) # "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
SELECT TABLE_NAME AS table_name,
table_rows AS QuantofRows,
ROUND((data_length + index_length) /1024, 2 ) AS total_size_kb
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'db'
ORDER BY (data_length + index_length) DESC;
tous les 2 ci-dessus est testé sur mysql