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


144

我想知道我的MySQL数据库使用多少空间,以便选择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字节的数据?索引长度是什么意思?谢谢 !


您有362000 +66560。Data_Length+索引长度
mandza 2014年


该页面将为您提供确切的答案rathishkumar.in/2017/12/…–
Rathish

Answers:


281

来自MySQL论坛上的 S. Prakash :

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

或一行以方便复制粘贴:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 

7
MB中的可用空间是什么意思?我有100 GB的可用空间,但报告的可用空间不足1 GB。
Barth

1
@Barth在文档中表示“ InnoDB表的可用空间(以字节为单位)”。不幸的是有没有解释什么指: - \
ckujau

13
可用空间(以字节为单位)正好意味着-这意味着如果您优化表或从头开始重建表,则可以回收空间量。当数据库将信息存储在磁盘上时,它们会按块分配信息;删除记录通常会在已使用的块之间释放一个块,并且将所有其他块移至另一处以占用该空间非常昂贵,因此将其标记为“空闲”。该空间可以稍后由数据库引擎本身使用,或者可以使用OPTIMIZE TABLE foo(MyISAM)回收,或为InnoDB表重新创建和分析。
2015年

92

您可以通过在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>"

30

如果您使用phpMyAdmin,它可以告诉您此信息。

只需转到“数据库”(顶部菜单),然后单击“启用统计信息”。

您将看到如下内容:

phpMyAdmin屏幕截图

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


我目前正在使用000webhost。它具有phpMyAdmin,但我找不到“启用统计信息”复选框。是否有(可能)查询?
marvin

1
@marvin好吧,可能是网络主机安装了较旧版本的phpMyAdmin。我不知道此功能是在哪个版本中引入的。
Radu Murzea

在边栏中,单击顶部的“主页”图标,将您带到主页。在右侧窗口中,单击“数据库”。它显示数据库的一列表,下面是称为“启用统计信息”的链接
VeeK



0

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

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

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'

5
你能详细说明吗?特别是你的常数300150
Melebius

拜托,你能详细点吗?
艾伦·安德拉德


0

Oracle的MySQL实用程序有一个名为mysqldiskusage的命令,该命令显示每个数据库的磁盘使用情况:https ://dev.mysql.com/doc/mysql-utilities/1.6/en/mysqldiskusage.html


0

如果您使用的是MySql Workbench,则很容易获得数据库大小,每个表大小,索引大小等的所有详细信息。

  1. 右键单击架构
  2. 选择模式检查器选项

    在此处输入图片说明

  3. 它显示模式大小的所有详细信息

  4. 选择选项卡以查看每个表的大小。

    在此处输入图片说明

  5. 表大小在“数据长度”列中显示


0

如果要查找所有MySQL数据库的大小,请使用此命令,它将显示它们各自的大小(以兆字节为单位)。

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

如果您有大型数据库,则可以使用以下命令显示结果(以GB为单位)。

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

例如,如果只想显示特定数据库的大小YOUR_DATABASE_NAME,则可以使用以下查询;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.