如何在MySQL中查找特定用户使用的总空间

时间:2014-05-31 17:27:27

标签: mysql mysqli

我已阅读total size of datadetermine space of a particular table等,但我想知道,是否有可能找到表中特定用户使用的总空间(例如GMail如何显示您你用过的总空间。)?

假设我有user_id 1谁拥有100条私人消息(不在文件夹中,只在数据库中)和10个文件上传(其位置存储在数据库中)。这些都在3个单独的表中,但它们确实占用了MySQL空间)。是否可以创建一个查询,为该用户提供总共所有空间?

2 个答案:

答案 0 :(得分:0)

评论太长了。

答案是“不是真的”。您可以在用户使用的所有表中的所有字段中添加空格。但这真的是用户使用的空间量吗?

考虑一个只有一条记录的表。数据需要在某个地方。在数据库中,记录存储在页面上,典型页面大小为16k。因此,无论一条记录有多大或多小,它都将占据至少16k。您是否将这一切归因于用户?

只考虑记录的大小。有时,整数,浮点数和双精度等字段需要对齐 - 即,从地址空间中的4字节或8字节边界开始。这可能会在记录中留下漏洞。这可归因于用户吗?类似地,varchar()类型具有用于存储长度的开销,并且可空列具有用于存储NULL标志的开销。你如何归因于这些?

当您开始添加索引和blob以及文本类型时,情况会变得更加复杂,这会引入包含数据的其他类型的页面。

并且,通常,您可以删除用户使用的所有记录,并且不释放数据库要使用的空闲页面。新记录将进入以前使用的空间,但只有同一个表中的新记录。

答案 1 :(得分:0)

不幸的是,你不能。 以下查询将显示整个yourtable表占用的空间,但您无法将其过滤到特定的行或条件。这意味着它显示了所有用户占用的空间。

SHOW TABLE STATUS IN your_database LIKE 'yourtable';

gmail向您展示了什么,它的物理空间。电子邮件作为文件存储在服务器上,而不是存储在数据库中。这就是为什么你可以确定它使用了多少空间的原因。

一种困难的方法是为该特定用户创建一个临时表,并使用该用户的确切记录填充它,并使用我上面写的查询,查看该表的整个大小。这将是特定用户占用的总空间量。您感兴趣的价值是data_length

无论如何,如果你选择这种方法,请考虑它资源非常昂贵的事实,你应该缓存结果并且不要指望即时获取这些数据(实时)。