mysql怎么查看表大小_mysql查看数据库表占用空间的方法

通过查询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中各表的空间使用情况,便于性能优化和容量规划。