讲师中心 微信公众号
AI工具推荐 视频效率加速

mysql如何获取表占用的磁盘空间大小_DATA_LENGTH系统查询

冬明大大_7285

冬明大大_7285

发布时间:2026-05-20 07:37:36

|

396人浏览过

|

来源于php中文网

原创

必须通过information_schema.TABLES查询DATA_LENGTH,它表示表数据页的近似字节数,非实时精确值,单位需换算为MB才直观,且不可在普通表中直接引用。

mysql如何获取表占用的磁盘空间大小_data_length系统查询

查 DATA_LENGTH 必须用 information_schema.TABLES

MySQL 不提供直接函数(比如 get_table_size())来查单表磁盘占用,DATA_LENGTH 是 information_schema.TABLES 视图里的一个字段,它反映的是表数据页(.ibd 文件主体)的近似字节数,不是磁盘上最终占用的精确值,但对日常评估足够可靠。

常见错误是试图在普通 SELECT 中直接引用 DATA_LENGTH,比如 SELECT DATA_LENGTH FROM my_table —— 这会报错,因为该字段只存在于元数据视图中。

  • 必须查 information_schema.TABLES,且指定 TABLE_SCHEMA(库名)和 TABLE_NAME(表名)
  • 注意权限:用户需有对 information_schema 的 SELECT 权限(通常默认有)
  • DATA_LENGTH 对 MyISAM 和 InnoDB 都有效,但含义略有不同:InnoDB 下包含聚簇索引数据页,不含二级索引;MyISAM 下是 .MYD 文件大小

查单表空间大小的最小可用 SQL

最简写法就是一条带条件的查询,结果单位是字节,建议转成 MB 更直观:

SELECT 
  TABLE_NAME,
  ROUND(DATA_LENGTH / 1024 / 1024, 2) AS data_size_mb,
  ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS index_size_mb,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS total_size_mb
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'your_database_name' 
  AND TABLE_NAME = 'your_table_name';

注意:INDEX_LENGTH 是单独字段,不能忽略——尤其当表有大量二级索引时,它可能接近甚至超过 DATA_LENGTH。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 别漏掉 TABLE_SCHEMA 条件,否则可能跨库匹配到同名表
  • 如果表名含特殊字符或大小写敏感,确保引号或大小写完全一致(Linux 系统下库/表名默认区分大小写)
  • 查询结果可能延迟:InnoDB 的统计值由采样估算而来,非实时精确值;如需刷新,可执行 ANALYZE TABLE your_table_name

为什么 DATA_LENGTH 和 du -h 查出的 .ibd 文件大小不一致

这是最容易困惑的点。DATA_LENGTH 是 MySQL 内部统计的「已使用数据页字节数」,而 du -h /var/lib/mysql/your_db/your_table.ibd 显示的是文件在磁盘上的实际分配大小(含空闲页、未回收的删除空间、碎片等)。

  • InnoDB 表删除大量数据后,DATA_LENGTH 会下降,但 .ibd 文件尺寸通常不会自动收缩(除非开启 innodb_file_per_table 并执行 OPTIMIZE TABLE)
  • DATA_LENGTH 不包含 Undo 日志、Redo 缓冲区、临时排序空间等运行时开销
  • 如果启用了压缩(ROW_FORMAT=COMPRESSED),DATA_LENGTH 是解压后的逻辑大小,而磁盘文件是压缩后的物理大小

批量查多个表或整个库的空间分布

把 WHERE 条件放宽就能快速看清库内“大户”:

SELECT 
  TABLE_NAME,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS total_mb
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'your_database_name'
ORDER BY total_mb DESC
LIMIT 10;

这种写法适合快速定位膨胀表。但要注意:

  • 大库执行可能较慢,因为 information_schema.TABLES 在某些旧版本 MySQL(如 5.6)中会触发全表扫描式统计
  • 如果看到某张表 DATA_LENGTH 为 0 但 TABLE_ROWS 很大,大概率是统计信息过期,应 ANALYZE TABLE
  • 不要依赖 DATA_LENGTH 做容量精准规划,它只是辅助判断;真正做磁盘预算得看 du 或监控工具采集的文件系统级指标
真实场景里,DATA_LENGTH 的价值在于快速横向对比和趋势观察,而不是绝对精度。一旦发现某张表增长异常,再结合 SHOW CREATE TABLE、慢查日志、以及 INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS 深挖才更有效。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2393

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1439

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

855

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3372

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5768

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1239

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6031

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5222

2023.08.14

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 193人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn