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 外键约束和表关系相关总结
Jun 20 MySQL
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
Jun 26 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
Jul 02 MySQL
mysql备份策略的实现(全量备份+增量备份)
Jul 07 MySQL
mysql中int(3)和int(10)的数值范围是否相同
Oct 16 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 MySQL
了解MySQL查询语句执行过程(5大组件)
Aug 14 MySQL
MySQL新手入门进阶语句汇总
Sep 23 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 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随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
Track Image Loading效果代码分析
2007/08/13 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
js倒计时显示实例
2016/12/11 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
vue百度地图 + 定位的详解
2019/05/13 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Django视图扩展类知识点详解
2019/10/25 Python
python实现超市商品销售管理系统
2019/11/22 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
python标准库OS模块详解
2020/03/10 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
Linux上比较文件的命令都有哪些
2013/09/28 面试题
写给保洁员表扬信
2014/01/08 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
家长学校工作方案
2014/05/07 职场文书
贷款收入证明格式
2015/06/24 职场文书
重阳节活动主持词
2015/07/04 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers