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 相关文章推荐
数据库连接池
Apr 06 MySQL
正确使用MySQL update语句
May 26 MySQL
MySQL query_cache_type 参数与使用详解
Jul 01 MySQL
MySQL系列之十五 MySQL常用配置和性能压力测试
Jul 02 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
浅谈MySQL函数
Oct 05 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
利用JuiceFS使MySQL 备份验证性能提升 10 倍
Mar 17 MySQL
MySQL创建表操作命令分享
Mar 25 MySQL
MySQL Server 层四个日志
Mar 31 MySQL
MySQL分区以及建索引的方法总结
Apr 13 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_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
Js动态创建div
2008/09/25 Javascript
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
python的else子句使用指南
2016/02/27 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
内部类的定义、种类以及优点
2013/10/16 面试题
中学生运动会入场词
2014/02/12 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
离职感谢信怎么写
2015/01/22 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技