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";
将 $DB_NAME 替换为数据库名,$TABLE_NAME 替换为表名。
查询指定数据库中所有表的大小并排序
1 2 3 4 5 6
SELECT table_schema as `Database`, table_name AS `Table`, round(((data_length + index_length) /1024/1024), 2) `Size in MB` FROM information_schema.TABLES ORDERBY (data_length + index_length) DESC;
查询当前所选数据库中所有表的大小并排序
1 2 3 4
SELECT table_name , round(((data_length + index_length) /1024/1024), 2) as SIZE_MB FROM information_schema.TABLES WHERE table_schema = DATABASE() ORDERBY SIZE_MB DESC;
使用 MySQL Workbench
右键单击模式名称,然后点击 “Schema inspector”。
在弹出的窗口中,第一个 “Info” 标签页显示数据库大小的大致估计(以 MB 为单位)。
第二个 “Tables” 标签页显示每个表的数据长度和其他详细信息。
使用命令行工具
从 shell 执行查询
1
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
将 DB_NAME 替换为数据库名。
使用 Bash 脚本遍历所有数据库
1
for i in `mysql -NB -e 'show databases'`; doecho$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
使用 phpMyAdmin
打开表结构页面,在 “Space usage” 部分可以看到数据、索引和总大小的信息。
核心代码
以下是一个通用的查询指定数据库中所有表大小并按大小降序排序的 SQL 代码:
1 2 3 4 5 6
SELECT table_name AS `Table`, round(((data_length + index_length) /1024/1024), 2) `Size in MB` FROM information_schema.TABLES WHERE table_schema ='your_database_name' ORDERBY (data_length + index_length) DESC;
select NAME as TABLENAME,FILE_SIZE/(1024*1024*1024) as ACTUAL_FILE_SIZE_GB , round(((data_length + index_length) /1024/1024/1024), 2) as REPORTED_TABLE_SIZE_GB from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES s join INFORMATION_SCHEMA.TABLES t on NAME = Concat(table_schema,'/',table_name) orderby FILE_SIZE desc
但需要注意,查询此表可能需要 PROCESS 权限。
SHOW TABLE STATUS 不显示某些表的准确信息
对于某些存储引擎或特殊表,SHOW TABLE STATUS 可能无法提供准确的信息。建议使用 information_schema.TABLES 进行查询。