You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL 5.6未启用InnoDB单表文件时如何查询表数据与索引大小

在MySQL 5.6未开启innodb_file_per_table时获取InnoDB表大小的方法

嘿,这个场景我太熟悉了!当没开innodb_file_per_table的时候,所有InnoDB表的数据和索引都挤在共享表空间文件(比如ibdata1)里,没法直接从磁盘文件单独揪出某张表的大小,但咱们可以通过MySQL自带的系统统计表来拿到准确的数据,具体操作如下:

核心思路

InnoDB会在information_schema里维护每张表的空间使用统计信息,哪怕是共享表空间模式下也不例外。我们可以查询information_schema.TABLES表来获取单表的数据大小和索引大小。

具体查询语句

把下面的你的数据库名替换成你要查询的库名,执行这条SQL就能得到所有InnoDB表的详细大小:

SELECT
    TABLE_NAME AS '表名',
    ROUND(data_length / 1024 / 1024, 2) AS '数据大小(MB)',
    ROUND(index_length / 1024 / 1024, 2) AS '索引大小(MB)',
    ROUND((data_length + index_length) / 1024 / 1024, 2) AS '总大小(MB)'
FROM
    information_schema.TABLES
WHERE
    ENGINE = 'InnoDB'
    AND TABLE_SCHEMA = '你的数据库名';

如果只想查某一张表,可以再加个AND TABLE_NAME = '你的表名'的条件。

关键说明

  • data_length:代表表的数据占用空间(字节),我们把它转成了更易读的MB单位
  • index_length:代表表的所有索引占用的空间(字节)
  • 这些数值是InnoDB维护的统计值,日常使用足够准确;如果想要更精准的结果,可以先执行ANALYZE TABLE 你的表名;更新表的统计信息后再查询

额外提醒

因为共享表空间是所有表共用的,所以你没法通过查看磁盘文件的方式单独计算某张表的大小,只能依赖MySQL系统表提供的统计数据。

内容的提问来源于stack exchange,提问作者ROHIT KHURANA

火山引擎 最新活动