web-dev-qa-db-fra.com

Requête pour déterminer la taille des tables dans une base de données? (mysql)

Le site Web "Comment calculer la taille de la base de données MySQL" donne deux requêtes:

Déterminer les tailles de toutes les bases de données

SELECT table_schema "Data Base Name", SUM( data_length + index_length) / 1024 / 1024 
"Data Base Size in MB" FROM information_schema.TABLES GROUP BY table_schema ;

Déterminer la taille de toutes les tables d'une base de données

SELECT TABLE_NAME, table_rows, data_length, index_length, 
round(((data_length + index_length) / 1024 / 1024),2) "Size in MB"
FROM information_schema.TABLES WHERE table_schema = "schema_name";

La première requête fonctionne correctement, mais la deuxième requête ne produit pas de jeu de résultats. Il montre simplement les noms des champs sans aucune ligne. Comment puis-je modifier la 2e requête pour afficher correctement la taille des tailles de mes tables dans ma base de données.

40
user784637

Remplacer "schema_name" avec le nom de l'une de vos bases de données.

Et tilisez des guillemets simples pour les littéraux de chaîne , pas des guillemets doubles.

29
Bill Karwin

Ce fut un fil utile. Cette légère variation sur la deuxième recette de l'OP renvoie uniquement les tables (pas de vues) et ordonne le jeu de données retourné par taille de table --- du plus grand au plus petit:

MySQL :

SELECT 
  TABLE_NAME, table_rows, data_length, index_length,  
  round(((data_length + index_length) / 1024 / 1024),2) 'Size in MB' 
FROM information_schema.TABLES 
WHERE table_schema = 'yourSchemaName' and TABLE_TYPE='BASE TABLE' 
ORDER BY data_length DESC;

PostGRES : Je devais faire la même chose dans PostGRES aujourd'hui, et emprunter de l'aide à cette réponse (et une autre que je perdu après avoir fermé l'onglet du navigateur), c'est ce que je me suis retrouvé. L'ajouter ici au cas où cela serait utile pour quelqu'un d'autre.

SELECT 
  t.tbl table_name,
  ct.reltuples row_count,
  pg_total_relation_size(t.tbl) size,
  pg_size_pretty(pg_total_relation_size(t.tbl)) pretty_size
FROM (
  SELECT 
    table_name tbl
    FROM information_schema.tables
    WHERE 
      table_schema = 'public'
        AND table_type = 'BASE TABLE'
) t
join (
  SELECT 
    relname, reltuples
  FROM pg_class C
    LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
  WHERE 
    nspname NOT IN ('pg_catalog', 'information_schema') 
      AND relkind='r' 
) ct 
on t.tbl = ct.relname
order by size desc ;
23
elrobis

Je pense que c'est mieux .. http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

show table status from database;
11
user862010

Voici une requête que j'utilise pour donner la taille de chaque table dans une base de données.

SELECT CASE WHEN (GROUPING(sob.name)=1) THEN 'All_Tables'
   ELSE ISNULL(sob.name, 'unknown') END AS Table_name,
   SUM(sys.length) AS Byte_Length
FROM sysobjects sob, syscolumns sys
WHERE sob.xtype='u' AND sys.id=sob.id
GROUP BY sob.name
WITH CUBE
3
Scott S