How can you determine how much disk space a particular MySQL table is taking up?

前端 未结 8 479
死守一世寂寞
死守一世寂寞 2020-11-30 16:20

Is there a quick way to determine how much disk space a particular MySQL table is taking up? The table may be MyISAM or Innodb.

相关标签:
8条回答
  • 2020-11-30 17:09

    Based on the RolandMySQLDBA's answer I think we can use the above to get the size of each schema in a table:

    SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb 
        FROM information_schema.tables GROUP BY table_schema;
    

    Really liked it!

    0 讨论(0)
  • 2020-11-30 17:10

    For a table mydb.mytable run this for:

    BYTES

    SELECT (data_length+index_length) tablesize
    FROM information_schema.tables
    WHERE table_schema='mydb' and table_name='mytable';
    

    KILOBYTES

    SELECT (data_length+index_length)/power(1024,1) tablesize_kb
    FROM information_schema.tables
    WHERE table_schema='mydb' and table_name='mytable';
    

    MEGABYTES

    SELECT (data_length+index_length)/power(1024,2) tablesize_mb
    FROM information_schema.tables
    WHERE table_schema='mydb' and table_name='mytable';
    

    GIGABYTES

    SELECT (data_length+index_length)/power(1024,3) tablesize_gb
    FROM information_schema.tables
    WHERE table_schema='mydb' and table_name='mytable';
    

    GENERIC

    Here is a generic query where the maximum unit display is TB (TeraBytes)

    SELECT 
        CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
        CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
        CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
    FROM
    (
        SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
        FROM 
        (
            SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
            FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
            FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
            FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
            FROM information_schema.tables
            WHERE table_schema='mydb'
            AND table_name='mytable'
        ) AA
    ) A,(SELECT 'B KBMBGBTB' units) B;
    

    Give it a Try !!!

    0 讨论(0)
提交回复
热议问题