如何获得真正的MySQL数据库大小?

我想知道我的MySQL数据库使用多less空间,以select一个Web主机。 我发现命令SHOW TABLE STATUS LIKE 'table_name'所以当我做查询时,我得到这样的东西:

 Name | Rows | Avg. Row Length | Data_Length | Index Length ---------- ---- --------------- ----------- ------------ table_name 400 55 362000 66560 
  • 数字四舍五入。

那么对于这个表,我有362000或400 * 362000 = 144800000字节的数据? 索引长度是什么意思? 谢谢 !

来自S. Prakash在MySQL论坛上发现:

 SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB", sum( data_free )/ 1024 / 1024 "Free Space in MB" FROM information_schema.TABLES GROUP BY table_schema ; 

您可以通过在Mysql客户端运行以下命令来获取Mysql数据库的大小

 SELECT sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2)) as "Size in GB" FROM information_schema.TABLES WHERE table_schema = "<database_name>" 

如果你使用phpMyAdmin,它可以告诉你这个信息。

只需进入“数据库”(顶部的菜单),然后点击“启用统计”。

你会看到这样的东西:

phpMyAdmin截图

随着尺寸的增加,这可能会失去一些准确性,但对于您的目的而言,它应该足够准确。

如果你想find它在MB做到这一点

 SELECT table_schema "DB Name", Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables GROUP BY table_schema; 

基本上有两种方法:查询数据库(数据长度+索引长度)或检查文件大小。 索引长度与索引中存储的数据有关。

一切都在这里描述:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/

没有答案包括开销大小和表的元数据大小。

以下是对数据库分配的“磁盘空间”的更准确估计。

 SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME' 

SUM(Data_free) 可能有效,也可能不会有效 。 这取决于innodb_file_per_table的历史。 更多的讨论在这里find。