2011-12-02 63 views
35

網站"How to calculate the MySQL database size"給出了兩個疑問:查詢以確定數據庫中表的大小? (MySQL的)

確定尺寸的所有數據庫的

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 ; 

確定所有表的大小在數據庫

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

第一個查詢工作正常,但第二個查詢不會生成結果集。它只顯示沒有任何行的字段的名稱。如何修改第二個查詢以正確顯示我的數據庫中表的大小大小。

回答

17

這是一個有用的線程。在OP的第二個配方這個微小的變化只返回表(無意見)和表大小號令返回的數據集---最大到最小:

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:我今天需要在PostGRES中做同樣的事情,並從this answer(以及另一個在關閉瀏覽器選項卡後我失去了一些幫助)借用一些幫助,這就是我最終的結果。在這裏添加它以防其他人使用。

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

這是我用來給出數據庫中每個表的大小的查詢。

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