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 使用SQL语句修改表名的实现
Apr 07 MySQL
MySQL 如何分析查询性能
May 12 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
mysql定时自动备份数据库的方法步骤
Jul 07 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 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实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
JavaScript 常用函数
2009/12/30 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
2011/05/12 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
JS中递归函数
2016/06/17 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python使用turtle库绘制树
2018/06/25 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
python简单实现最大似然估计&scipy库的使用详解
2020/04/15 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
介绍一下你对SOA的认识
2016/04/24 面试题
朋友圈早安励志语录!
2019/07/08 职场文书