Mysql 如何合理地统计一个数据库里的所有表的数据量


Posted in MySQL onApril 18, 2022

场景:

mysql统计一个数据库里所有表的数据量,最近在做统计想查找一个数据库里基本所有的表数据量,数据量少的通过select count再加起来也是可以的,不过表的数据有点多,不可能一个一个地查

记得在Navicat里,选择一个数据量,点击表,如图:

Mysql 如何合理地统计一个数据库里的所有表的数据量

是可以看到所有表具体的数据行的

Mysql 如何合理地统计一个数据库里的所有表的数据量

然后可以通过sql实现?在mysql里是可以查询information_schema.tables这张表的

SELECT table_rows,table_name FROM information_schema.tables  
 WHERE TABLE_SCHEMA = '数据库名称' 
 and table_name not in ('不查询的表名称') 
 ORDER BY table_rows DESC;

要统计的,加上sum函数就可以

SELECT sum(table_rows) FROM information_schema.tables  
 WHERE TABLE_SCHEMA = '数据库名称' 
 and table_name not in ('不查询的表名称') 
 ORDER BY table_rows DESC;

OK,本来还以为已经没问题了,然后还是被反馈统计不对,后来去找了资料

https://dev.mysql.com/doc/refman/8.0/en/information-schema-tables-table.html

官网的解释:

TABLE_ROWS
The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40% to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate count.
TABLE_ROWS is NULL for INFORMATION_SCHEMA tables.
For InnoDB tables, the row count is only a rough estimate used in SQL optimization. (This is also true if the InnoDB table is partitioned.)

大概意思是对于MyISAM才是正确的统计数据,但是对于InnoDB引擎的,可能与实际值相差 40% 到 50%,所以只是一个大概的统计

所以针对这种情况,要更改存储引擎,肯定是不太合适,因为InnoDB是默认的存储引擎,能支持事务外健,并发情况性能也比较好

所以,根据网上的做法,重新analyze 对应表,在mysql8.0版本是不管用的,发现查询数据还是不对,估计是mysql版本太高,mysql5版本没验证过

analyze table [table_name]

继续找资料,在Navicat工具->命令行页面,设置全局或者回话的information_schema_stats_expiry为0,表示自动更新,设置全局的不知道会不会影响性能,所以不知道还是设置会话的就可以

SET SESSION information_schema_stats_expiry=0;
SET @@SESSION.information_schema_stats_expiry=0;

查询设置的information_schema_stats_expiry值

show variables like '%information_schema_stats%';

MySQL 8.0为了提高information_schema的查询效率,会将视图tables和statistics里面的统计信息缓存起来,缓存过期时间由参数information_schema_stats_expiry决定

补充:查询表大小

我需要查询的库名为:kite

因此sql语句为:

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='kite'
order by table_rows desc, index_length desc;

结果如下:

Mysql 如何合理地统计一个数据库里的所有表的数据量

总结 

到此这篇关于MySQL如何统计一个数据库所有表数据量的文章就介绍到这了!

MySQL 相关文章推荐
mysql查询的控制语句图文详解
Apr 11 MySQL
MySQL慢查询的坑
Apr 28 MySQL
MySQL主从搭建(多主一从)的实现思路与步骤
May 13 MySQL
MySQL 视图(View)原理解析
May 19 MySQL
MySQL中使用or、in与union all在查询命令下的效率对比
May 26 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
Mysql 设置boolean类型的操作
Jun 04 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
Jun 26 MySQL
mysql timestamp比较查询遇到的坑及解决
Nov 27 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
Mysql开启外网访问
May 15 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
Dec 24 MySQL
MySQL三种方式实现递归查询
Apr 18 #MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Golang连接并操作MySQL
Apr 14 #MySQL
以MySQL5.7为例了解一下执行计划
Apr 13 #MySQL
MySQL时区造成时差问题
Mysql调整优化之四种分区方式以及组合分区
Apr 13 #MySQL
聊聊mysql都有哪几种分区方式
Apr 13 #MySQL
You might like
php+mysql写的简单留言本实例代码
2008/07/25 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
xml和web特殊字符
2009/04/28 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Python中断多重循环的思路总结
2019/10/04 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
客服工作职责
2013/12/11 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
中学图书馆工作总结
2015/08/11 职场文书