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的MVCC多版本并发控制的实现
Apr 14 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 MySQL
记一次Mysql不走日期字段索引的原因小结
Oct 24 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
实战 快速定位MySQL的慢SQL
Mar 22 MySQL
mysql性能优化以及配置连接参数设置
May 06 MySQL
详解MySQL的内连接和外连接
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高级对象构建 工厂模式的使用
2012/02/05 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
PHP多维数组排序array详解
2017/11/21 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
什么是JavaScript
2009/08/13 Javascript
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
jstree的简单实例
2016/12/01 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
python实现朴素贝叶斯算法
2018/11/19 Python
python重试装饰器的简单实现方法
2019/01/31 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
文明村镇申报材料
2014/05/06 职场文书
婚礼答谢词
2015/01/04 职场文书
绵山导游词
2015/02/05 职场文书
公司放假通知怎么写
2015/04/15 职场文书
导游词之青岛崂山
2019/12/27 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
基于python制作简易版学生信息管理系统
2021/04/20 Python
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫