web-dev-qa-db-fra.com

Comment obtenir la taille des tables d'une base de données MySQL?

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?

701
JPashs

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;
1598
ChapMic
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.

80
Sumith Harshan
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).

30
Gank

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;
20
zainengineer

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.

12
Guppy

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)
9
Nurul Akter Towhid

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
6
Almis

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>

5
user1380599

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;
4
dev101

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".

2
Nav

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
1
Ryum Aayur

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).

1
exic

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"
)
1
MINGSONG HU

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;

0
William
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

0
William