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 20 MySQL
教你用eclipse连接mysql数据库
Apr 22 MySQL
jdbc使用PreparedStatement批量插入数据的方法
Apr 27 MySQL
详解mysql三值逻辑与NULL
May 19 MySQL
MySQL中InnoDB存储引擎的锁的基本使用教程
May 26 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
mysql备份策略的实现(全量备份+增量备份)
Jul 07 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
MySQL慢查询中的commit慢和binlog中慢事务的区别
Jun 16 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
第十节--抽象方法和抽象类
2006/11/16 PHP
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
浅析php中jsonp的跨域实例
2013/06/21 PHP
使用PHP编写的SVN类
2013/07/18 PHP
yii添删改查实例
2015/11/16 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
Yii2中datetime类的使用
2016/12/17 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
pygame学习笔记(4):声音控制
2015/04/15 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
夜大毕业生自我鉴定
2013/10/31 职场文书
介绍信样本
2015/01/31 职场文书
英语教师个人工作总结
2015/02/09 职场文书
初中教师个人总结
2015/02/10 职场文书
道歉信怎么写
2015/05/12 职场文书
活动新闻稿范文
2015/07/17 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL