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性能压力基准测试工具sysbench的使用简介
Apr 21 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
Mysql数据库手动及定时备份步骤
Nov 07 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MYSQL常用函数介绍
May 05 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 MySQL
MySQL中dd::columns表结构转table过程及应用详解
Sep 23 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
ftp类(example.php)
2006/10/09 PHP
PHP5 安装方法
2006/10/09 PHP
mysql+php分页类(已测)
2008/03/31 PHP
PHP 事件机制(2)
2011/03/23 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
JS中Iframe之间传值的方法
2013/03/11 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
js实现无缝轮播图
2020/03/09 Javascript
win7安装python生成随机数代码分享
2013/12/27 Python
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
pycharm安装图文教程
2017/05/02 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
python实现录制全屏和选择区域录屏功能
2021/02/05 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
台湾屈臣氏网路商店:Watsons台湾
2020/12/29 全球购物
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
企业承诺书格式
2014/05/21 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
美术教师个人总结
2015/02/06 职场文书
行政前台岗位职责
2015/04/16 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
运动会观后感
2015/06/09 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
一文弄懂MySQL索引创建原则
2022/02/28 MySQL
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技