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
MySQL kill不掉线程的原因
May 07 MySQL
如何用Navicat操作MySQL
May 12 MySQL
新手必备之MySQL msi版本下载安装图文详细教程
May 21 MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
Feb 28 MySQL
排查并解决MySQL生产库内存使用率高的报警
Apr 11 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
MySQL分布式恢复进阶
Jul 23 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 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应用提速面面观
2006/10/09 PHP
用文本文件制作留言板提示(下)
2006/10/09 PHP
PHP 定界符 使用技巧
2009/06/14 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
JS日历 推荐
2006/12/03 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
Python生成随机MAC地址
2015/03/10 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
Python小白垃圾回收机制入门
2020/06/09 Python
如何利用Python写个坦克大战
2020/11/18 Python
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
C语言编程练习
2012/04/02 面试题
餐饮服务员岗位职责
2015/02/09 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
Python 如何安装Selenium
2021/05/06 Python