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数据库入门第一步之创建表
May 14 MySQL
MySQL中出现乱码问题的终极解决宝典
May 26 MySQL
MySQL删除和插入数据很慢的问题解决
Jun 03 MySQL
MYSQL 的10大经典优化案例场景实战
Sep 14 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
mysql创建存储过程及函数详解
Dec 04 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
delete in子查询不走索引问题分析
Jul 07 MySQL
MySQL事务的ACID特性以及并发问题方案
Jul 15 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 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和ACCESS写聊天室(十)
2006/10/09 PHP
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
php变量范围介绍
2012/10/15 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
js实现蒙版效果
2020/01/11 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
教你学会使用Python正则表达式
2017/09/07 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
python logging日志模块以及多进程日志详解
2018/04/18 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
keras 多任务多loss实例
2020/06/22 Python
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
如何利用find命令查找文件
2016/11/18 面试题
学校教研活动总结
2014/07/02 职场文书
物流管理专业推荐信
2014/09/06 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书