确定哪个表占用MySQL中的大部分磁盘空间

时间:2010-03-16 09:33:48

标签: mysql mysqldump diskspace

确定哪个表占用大部分磁盘空间的最简单方法是什么?

障碍:我没有MySQL服务器,只有包含所有数据的文件(dump.sql)

3 个答案:

答案 0 :(得分:9)

您可能需要download MySQL server,将其安装在您的本地主机import the dump file上,然后使用:

SELECT   table_schema, 
         table_name, 
         data_length, 
         index_length 
FROM     information_schema.tables
ORDER BY data_length DESC;

答案 1 :(得分:1)

如果你在Linux上,你可以扫描转储文件中最长的行,根据索引,结构等,可能(或可能不是)最大的表,但如果你是一个不错的猜测无法获得服务器。

awk ' { if ( length > L ) { L=length ;s=$0 } }END{ print L,"\""s"\"" }' /root/sql/_common.all.301009.sql  | cut -c 1-100

这将显示最长行的前100个字符。例如,如果您在转储文件中每个表有多个插入(使用--extended-insert--opt选项),则这可能不起作用。

答案 2 :(得分:0)

快速解决方案可能是为转储中的每个表执行类似的操作:

cat dump.sql | grep -i '^INSERT INTO `table1`' | wc -c

(我希望你使用Linux,否则你可以安装Cygwin来获取windows系统上linux命令行的一些功能)

此命令将过滤掉特定表的转储的insert语句,并打印出这些已过滤的insert语句的总字节数。当然,insert语句的大小与表中存储行的大小不同,但如果您只需要确定哪个表(可能)是最大的,那么它可能是一个很好的近似值。