如何获得一个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_NAME
replace为数据库名称):
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”。