2011-12-02 14 views
35

Il sito "How to calculate the MySQL database size" dà due query:Query per determinare la dimensione delle tabelle in un database? (Mysql)

determinare le dimensioni di tutti i database

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 ; 

determinare la dimensione di tutte le tabelle di un database

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 prima query funziona correttamente, ma la seconda query non produce un set di risultati. Mostra solo i nomi dei campi senza righe. Come posso modificare la seconda query per mostrare correttamente la dimensione delle dimensioni delle mie tabelle nel mio database.

risposta

17

Questa è stata una discussione utile. Questa leggera variazione sul seconda ricetta del PO restituisce solo le tabelle (nessun visualizzazioni) e ordina il set di dati restituito dalla dimensione della tabella --- più grande a più piccolo:

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: Avevo bisogno di fare la stessa cosa in PostGRES oggi, e prendendo in prestito un po 'di aiuto da this answer (e un altro che ho perso dopo aver chiuso la scheda del browser), questo è quello che ho finito con. Aggiungendolo qui nel caso in cui sia utile per chiunque altro.

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 ; 
3

Ecco una query che uso per fornire le dimensioni di ogni tabella in un database.

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 
Problemi correlati