通过查询information_schema.tables可获取MySQL表大小信息:1. 查看指定数据库各表的总大小、数据大小、索引大小及行数;2. 通过添加表名条件查看单表空间使用情况;3. 按数据库分组统计所有库的总空间占用,单位均为MB,结果为逻辑大小,InnoDB行数为估算值。

在MySQL中查看表大小,可以通过查询information_schema数据库中的系统表来获取表的存储空间信息。以下是几种常用方法,帮助你快速了解每张表占用的空间大小。
1. 查看指定数据库中所有表的大小
执行以下SQL语句可以查看某个数据库中每张表的数据大小、索引大小和总占用空间(单位为MB):
示例(替换 your_database_name 为实际数据库名):
SELECT
table_name AS '表名',
round(((data_length + index_length) / 1024 / 1024), 2) AS '总大小(MB)',
round((data_length / 1024 / 1024), 2) AS '数据大小(MB)',
round((index_length / 1024 / 1024), 2) AS '索引大小(MB)',
table_rows AS '行数'
FROM information_schema.tables
WHERE table_schema = 'your_database_name'
ORDER BY (data_length + index_length) DESC;
说明:
-
data_length:表数据所占字节数 -
index_length:索引所占字节数 -
table_rows:表的近似行数(对于InnoDB可能不精确) - 除以 1024 / 1024 将字节转换为MB
2. 查看单个表的大小
如果你只想查看某一张表的空间使用情况,可以在上面的SQL中加上表名条件:
SELECT
table_name AS '表名',
round(((data_length + index_length) / 1024 / 1024), 2) AS '总大小(MB)',
round((data_length / 1024 / 1024), 2) AS '数据大小(MB)',
round((index_length / 1024 / 1024), 2) AS '索引大小(MB)'
FROM information_schema.tables
WHERE table_schema = 'your_database_name'
AND table_name = 'your_table_name';
3. 查看所有数据库的总大小分布
如果你想了解每个数据库总共占用了多少空间,可以按数据库分组统计:
SELECT
table_schema AS '数据库名',
round(SUM(data_length + index_length) / 1024 / 1024, 2) AS '总大小(MB)'
FROM information_schema.tables
GROUP BY table_schema
ORDER BY SUM(data_length + index_length) DESC;
注意事项
以下几点需要注意,避免误解结果:
- 上述结果中的大小是逻辑大小,不是磁盘上实际占用的物理空间(尤其是启用了压缩或文件系统块对齐时)
- InnoDB引擎的
table_rows是估算值,不一定准确 - 如果表使用了分区,结果会自动汇总所有分区的大小
- 需要有访问
information_schema的权限
基本上就这些。通过查询information_schema.tables,你可以快速掌握MySQL中各表的空间使用情况,便于性能优化和容量规划。










