6

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

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

4

3 回答 3

9

您可能需要下载 MySQL 服务器,将其安装在您的本地主机上,导入转储文件,然后使用:

SELECT   table_schema, 
         table_name, 
         data_length, 
         index_length 
FROM     information_schema.tables
ORDER BY data_length DESC;
于 2010-03-16T09:40:35.577 回答
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选项),这可能不起作用。

于 2010-03-16T09:47:47.150 回答
0

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

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

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

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

于 2010-03-16T09:48:27.620 回答