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 函数调用优化
Apr 07 MySQL
MySQL数字类型自增的坑
May 07 MySQL
浅谈mysql执行过程以及顺序
May 12 MySQL
正确使用MySQL INSERT INTO语句
May 26 MySQL
MySQL 常见存储引擎的优劣
Jun 02 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
MySQL系列之十五 MySQL常用配置和性能压力测试
Jul 02 MySQL
MySQL系列之十一 日志记录
Jul 02 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
MySQL分区路径子分区再分区
Apr 13 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 MySQL
Windows 64位 安装 mysql 8.0.28 图文教程
Apr 19 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+MySQL删除操作实例
2015/01/21 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
理解JSON:3分钟课程
2011/10/28 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
详解Python的循环结构知识点
2019/05/20 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
详解Python3中的 input() 函数
2020/03/18 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
图书室标语
2014/06/21 职场文书
告知书格式
2015/07/01 职场文书
学术会议领导致辞
2015/07/29 职场文书
聘任书范文大全
2015/09/21 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js