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

推荐答案

对于表mydb.mytable,运行以下命令:

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

这是一个最大单位显示为TB(TB)的通用查询

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;

试试看!!!

Mysql相关问答推荐

使用内部连接从同一表中删除似乎失败(两条记录均已删除)

未知变量default-validation-plugin=mysql_native_passenger'

在SQL中,为什么:=即使条件为False,也会在case声明中执行?我如何修复这个问题?

筛选器中的Case When语句

SQL-从一个字段中 Select 值,但另一个字段中不包含零值

Laravel DB::Transaction()

MySQL多次联接同一个表使计数变得奇怪

插入时发生日期时间字段溢出错误

对匹配两个或多个表的表结果进行排序

避免多个SQL查询的重构代码

关联同一个表中的两列

MySQL Procedure 变量在 count(*) 上接收 null

如何在 axios 请求中将更新的设置状态值作为参数传递

仅当其他行相等时才 Select 行值

MySQL 中的 LATERAL 语法 - 是否只是说左表首先执行以便下一个可以引用它?

FreeBASIC 中的 MySQL 访问读取

MySQL 如何处理并发插入?

If else on WHERE 子句

不是唯一的表/别名

MySQL 在每个唯一值第一次出现时 Select 行