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数据库中存入汉字报错的方法
May 06 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
Jun 26 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
MySQL 主从复制数据不一致的解决方法
Mar 18 MySQL
一次Mysql update sql不当引起的生产故障记录
Apr 01 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 MySQL
mysql如何查询连续记录
May 11 MySQL
详解Mysql数据库平滑扩容解决高并发和大数据量问题
May 25 MySQL
MySQL中order by的执行过程
Jun 05 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 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来检测proxy
2006/10/09 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
详解Python中的条件判断语句
2015/05/14 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
数据库什么时候应该被重组
2012/11/02 面试题
入党积极分子自我鉴定
2014/02/18 职场文书
元旦获奖感言
2014/03/08 职场文书
婚前协议书怎么写
2014/04/15 职场文书
环保志愿者活动总结
2014/06/27 职场文书
党员批评与自我批评
2014/10/15 职场文书
考研英语复习计划
2015/01/19 职场文书
迟到检讨书范文
2015/01/27 职场文书
技术入股协议书
2016/03/22 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android