如何确定特定MySQL表占用多少磁盘空间?

dan*_*dan 141 mysql

有没有快速的方法来确定特定MySQL表占用多少磁盘空间?该表可以是MyISAM或Innodb.

Rol*_*DBA 280

对于表mydb.mytable运行这个:

BYTES

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

KILOBYTES

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

MEGABYTES

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

GIGABYTES

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

GENERIC

这是一个通用查询,其中最大单位显示为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;
Run Code Online (Sandbox Code Playgroud)

试试看 !!!

  • `SELECT(data_length + index_length)/ power(1024,2)tablesize_mb,table_name FROM information_schema.tables WHERE table_schema ='mydb'order by tablesize_mb;`获取名称和大小的`mydb`所有表的列表,排序方式尺寸. (6认同)

Ben*_*Ben 14

快速的SQL,以MB为前20名最大的表.

SELECT table_schema, table_name,
  ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;
Run Code Online (Sandbox Code Playgroud)

希望对某人有用!


小智 10

这对于InnoDB表来说并不准确.磁盘上的大小实际上大于通过查询报告的大小.

有关详细信息,请参阅Percona的此链接.

http://www.mysqlperformanceblog.com/2008/12/16/how-much-space-does-empty-innodb-table-take/