统计MySQL数据表大小

有时候需要查询MySQL数据库中各个表大小,该如何操作呢?

MySQL中有一个名为 information_schema 的数据库,在该库中有一个 TABLES 表,这个表主要字段分别是:

TABLE_SCHEMA : 数据库名
TABLE_NAME:表名
ENGINE:所使用的存储引擎
TABLES_ROWS:记录数
DATA_LENGTH:数据大小
INDEX_LENGTH:索引大小

其他字段请参考MySQL的手册。

use information_schema;
SELECT 
   TABLE_NAME,
    (DATA_LENGTH/1024/1024) as DataM ,
    (INDEX_LENGTH/1024/1024) as IndexM, 
    ((DATA_LENGTH+INDEX_LENGTH)/1024/1024) as AllM,
    TABLE_ROWS
FROM
    TABLES
WHERE
    TABLE_SCHEMA = 'develop';

 


+------------+------------+------------+------------+------------+
| TABLE_NAME | DataM      | IndexM     | AllM       | TABLE_ROWS |
+------------+------------+------------+------------+------------+
| sbtest1    | 2.51562500 | 0.23437500 | 2.75000000 |       9936 |
| test       | 0.01562500 | 0.00000000 | 0.01562500 |          4 |
+------------+------------+------------+------------+------------+
 

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、付费专栏及课程。

余额充值