如何获得一个MySQL数据库的表的大小?

我可以运行这个查询来获取mysql数据库中所有表的大小:

show table status from myDatabaseName; 

我想帮助理解结果。 我正在寻找最大的表格。

我应该看哪一列?

您可以使用此查询来显示表的大小(尽pipe您需要先replacevariables):

 SELECT table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` FROM information_schema.TABLES WHERE table_schema = "$DB_NAME" AND table_name = "$TABLE_NAME"; 

或者这个查询列出每个数据库中每个表的大小,最大的是:

 SELECT table_schema as `Database`, table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` FROM information_schema.TABLES ORDER BY (data_length + index_length) DESC; 
 SELECT TABLE_NAME AS "Table Name", table_rows AS "Quant of Rows", ROUND( ( data_length + index_length ) /1024, 2 ) AS "Total Size Kb" FROM information_schema.TABLES WHERE information_schema.TABLES.table_schema = 'YOUR SCHEMA NAME/DATABASE NAME HERE' LIMIT 0 , 30 

您可以从“ information_schema ” – > SCHEMATA表 – >“ SCHEMA_NAME ”列中获取模式名称


其他你可以得到如下的MySQL数据库的大小

 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; 

结果

 DB Name | DB Size in MB mydatabase_wrdp 39.1 information_schema 0.0 

你可以在这里获得更多的细节。

 SELECT table_name AS "Table", round(((data_length + index_length) / 1024 / 1024), 2) as TEST FROM information_schema.TABLES WHERE table_schema = "YOUR_DATABASE_NAME" ORDER BY TEST; 

这也可以分类大小(DB大小以MB为单位)。

有一个简单的方法来使用Workbench获取许多信息:

  • 用鼠标右键单击架构名称,然后单击“架构检查器”。

  • 在结果窗口中,您有许多选项卡。 第一个选项卡“Info”以MB为单位显示数据库大小的粗略估计。

  • 第二个选项卡“Tables”显示每个表的数据长度和其他详细信息。

如果你想查询使用当前选定的数据库。 只需复制粘贴此查询。 (不需要修改)

 SELECT table_name , round(((data_length + index_length) / 1024 / 1024), 2) as SIZE_MB FROM information_schema.TABLES WHERE table_schema = (SELECT DATABASE()) ORDER BY SIZE_MB DESC; 

如果您使用的是phpmyadmin,那么只需转到表结构

例如

 Space usage Data 1.5 MiB Index 0 B Total 1.5 Mi 

尝试以下shell命令(将DB_NAMEreplace为数据库名称):

mysql -uroot <<<"SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"DB_NAME\" ORDER BY (data_length + index_length) DESC;" | head

对于Drupal / drush解决scheme,请检查下面的示例脚本,它将显示正在使用的最大表格:

 #!/bin/sh DB_NAME=$(drush status --fields=db-name --field-labels=0 | tr -d '\r\n ') drush sqlq "SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"${DB_NAME}\" ORDER BY (data_length + index_length) DESC;" | head -n20 

下面是使用bash命令行解决这个问题的另一种方法。

for i in mysql -NB -e 'show databases' ; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; done

从ChapMic的答案适应我的特殊需要。

只需指定数据库名称,然后按降序对所有表进行sorting – 从选定数据库中的LARGEST到SMALLEST表中sorting。 只需要replace1个variables=您的数据库名称。

 SELECT table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024), 2) AS `size` FROM information_schema.TABLES WHERE table_schema = "YOUR_DATABASE_NAME_HERE" ORDER BY size DESC; 

假设你的数据库名称是“news_alert”。 然后这个查询将显示数据库中所有表的大小。

所有表格的大小:

 SELECT TABLE_NAME AS `Table`, ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)` FROM information_schema.TABLES WHERE TABLE_SCHEMA = "news_alert" ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC; 

输出:

  +---------+-----------+ | Table | Size (MB) | +---------+-----------+ | news | 0.08 | | keyword | 0.02 | +---------+-----------+ 2 rows in set (0.00 sec) 

对于特定的表格:

 SELECT TABLE_NAME AS `Table`, ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)` FROM information_schema.TABLES WHERE TABLE_SCHEMA = "news_alert" AND TABLE_NAME = "news" ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC; 

输出:

 +-------+-----------+ | Table | Size (MB) | +-------+-----------+ | news | 0.08 | +-------+-----------+ 1 row in set (0.00 sec) 

如果您有ssh访问权限,那么您可能只需要尝试du -hc /var/lib/mysql (或者在my.cnf设置不同的datadir )。

显示行数和占用空间的数量和sorting的另一种方法。

 SELECT table_schema as `Database`, table_name AS `Table`, table_rows AS "Quant of Rows", round(((data_length + index_length) / 1024 / 1024/ 1024), 2) `Size in GB` FROM information_schema.TABLES WHERE table_schema = 'yourDatabaseName' ORDER BY (data_length + index_length) DESC; 

这个查询中唯一需要replace的string是“yourDatabaseName”。