《从根上理解MySQL是怎样运行的》第十三章笔记

第13章 兵马未动,粮草先行-InnoDB统计数据是如何收集的

查询成本的时候经常使用一些统计数据,统计数据是以什么方式收集来的呢?


两种不同的统计数据的存储方式

(1)永久性:存储在磁盘上的

(2)非永久性:存储在内存上的

可以指定相关的系统变量来选择使用哪种方式来存储,一般默认是存储在磁盘上的


基于磁盘的永久性的统计数据

存储的时候是将统计数据存储到表中的:


innodb-table-stats介绍

直接看下哪些列吧:

N-rows是估计值:InnoDB中按照一定的算法选取几个叶子节点页面,计算该节点中页中的记录数,然后这几个页记录数的平均数乘以所有叶子节点的数量就是该表的n-rows的值

个人思考:感觉就像是抽样调查,通过样本估计总体的个数量


Clusterted-index-size 和 sum-of-other-index-sizes统计项的收集

聚簇索引和其他索引的统计

这个统计数据的过程如下:

(1)从字典数据中找出各个索引的根页面的位置:

就是从表中之表中查询所有索引的老家在哪里

(2)从根页面的Page Header中找到叶子节点和非叶子节点的段Segment Header(段头部信息)

(3)然后再从这些Segment Header字段中找到对应的INODE Entry结构

(4)从这个结构中找到对应所有零散的页面地址以及FREE、NOT-FULL、FULL链表的基节点

然后你有了这个链表就可以开始统计数据了

小总结:字典数据 -》 两种节点对应段的信息 -〉 然后再从这些字段中找到对应的段结构 -》 最后得到主要的从属于段段三个链表的位置 -〉 数据统计

其实统计的着手点还是从管理页面的链表开始的,这下就好理解了:统计的过程主要就是重新寻找管理页面的链表的过程 + 统计


innodb-index-stats页介绍

看看各个列:

Index-name:说明记录是来自哪个索引的

Stat-name:统计同一个索引的各种值:叶节点占用页数,索引占用总页数

总之是各种统计的信息都在这上面


定期更新统计数据

统计数据更新的方式:

(1)innodb-stats-auto-recalc

自动重新统计数据:修改的记录数超过10%则自动重新统计(延迟异步统计)。InnoDB默认是以表来收集和存储统计数据的,搜易可以单独为某个表设置这个参数

(2)手动更新:手动调用ANALYZE TABLE来执行更新,这个就没什么好说的


基于内存的非永久统计数据:

这个很复杂,就不了解了哈哈哈💦


总结

InnoDB将统计数据存储到表中,可以是永久也可以是非永久的

通过各种参数可以指定使用哪种类型的统计数据

针对不同的表可以自定义相关数据统计属性

对于表中的NULL值有专门的参数来决定如何处理


第二天复习

这个数据的统计并不是数据库功能的核心啊,这里我们稍做了解即可

相关推荐
城管不管3 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
倔强的石头1063 小时前
向量数据库从相似度检索走向融合数据底座
数据库
今天AI了吗4 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
liuyicenysabel4 小时前
多服务上线日记三:
运维·服务器·笔记·学习
CHENGQUAN_kenan5 小时前
佛山亚马逊卖家出口退税合规指南|9610免税、一般贸易退税、无票采购、申报误区全覆盖
大数据·经验分享·笔记·百度
夜雪一千5 小时前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
lilian2336 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
皮卡丘不断更6 小时前
手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口
数据库·sqlite·fastapi·开源项目·个人效率
一只小小的芙厨6 小时前
基础数论总结
笔记·学习·算法
保卫大狮兄7 小时前
设备管理从台账到报废,完整生命周期一次讲清
数据库·设备管理·设备