mysql 如何统计表大小

本文介绍了如何使用SQL语句查询MySQL中指定表的数据文件大小、索引大小等信息,通过这些信息可以计算出整个表的实际占用空间。


mysql 如何统计表大小

@forandever 2011-11-11


使用SQL语句:



show table status from DBName where name = 'TBName' and Update_time > 20111111;

返回数组:
Name: TBName 表名
Engine: MyISAM | Innodb(表存储引擎)
Version: X 版本
Row_format: 行格式
Rows:  表内总行数
Avg_row_length:  平均每行大小
Data_length:  该表数据文件的总大小,单位字节
Max_data_length:  数据文件的最大长度. 存储引擎是innodb的话,这个值在show table status显示的值总是为0
Index_length:  索引大小
Data_free:  整序但未使用的字节数目
Auto_increment:  自动累加ID ,下一个AUTO_INCREMENT值
Create_time: 表被创建时间
Update_time: 数据文件被最后一次更新时间
Check_time: 表被最后一次检查时间。不是所有的存储引擎此时都更新,在此情况下,值为NULL
Collation: 编码
Checksum:
Create_options: row_format=DYNAMIC  ,和CREATE TABLE同时使用的额外选项
Comment: 注释


数据库大小=表结构+表数据+索引= Data_length+Index_length


@forever 2011-11-11







MySQL中,直接统计所有的总大小可能会比较复杂,因为MySQL并没有提供一个内置函数可以直接获取这个信息。不过,你可以通过一些组合查询和系统来估算。以下是一个示例脚本,它将遍历所有的数据并计算它们的总空间占用: ```sql SET @table_name = ''; SET @sql = 'SELECT (Data_length + Index_length) AS TotalSize, table_name FROM information_schema.tables t WHERE table_schema = DATABASE() AND table_type = ''BASE TABLE'' AND table_name != ''information_schema``'; WHILE (@table_name IS NOT NULL) BEGIN SET @table_name = (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME > @table_name AND TABLE_TYPE = 'BASE TABLE'); IF (@table_name IS NOT NULL) THEN SET @sql = CONCAT(@sql, ', (Data_length + Index_length) AS `TotalSize_', @table_name, '`, table_name = ?', @table_name); END IF; END; PREPARE stmt FROM @sql; EXECUTE stmt; ``` 这段脚本首先设置了一个循环,从`information_schema.tables`开始查找当前数据库中的下一个名,然后在循环体中拼接SQL,每次添加一个新的名到统计列中。最后,执这个动态生成的SQL来获取每个的总大小。 注意,这个方法可能不是完全准确的,因为它可能无法考虑到视图、存储过程等非基础大小,并且在大数据库中可能效率较低。如果你需要精确的数据,可能需要单独处理这类特殊的或者依赖于数据库管理系统特定的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值