当前位置: 首页 > news >正文

MYSQL的页

MYSQL的页

什么是页,页里面有啥

官方说法:

说白了就是在mysql中内存和磁盘最小的交互单元,大小是16kb,因为他是一整块一整块地址的申请,每次交互又读一页,你存储的数据或者想读取的一般来说都是相对靠近的,他一次读一页,就可以减少io的次数,性能自然就提高了。

就算你这个页内没有数据,他也是要分配16kb的存储空间,索引也是和b+树的节点对应,为什么要分配16kb呢,因为Linux操作系统中最小的管理文件单位是4kb,mysql作为一个数据库,显然不能那么少,就整多了点变成了16kb。

数据页/索引页

是⽤来存储数据和索引的"索引⻚",也叫做"数据 ⻚",不论哪种类型的⻚都会包含⻚头(FileHeader)和⻚尾(FileTrailer),⻚的主体信息使⽤数 据"⾏"进⾏填充

结构长这样:

页的文件头和文件尾

页的主体

主体的结构

页的主体,这里就是我们存写文件的地方,每一个新的页,都是会存在两行的,一个是最大行一个最小行,说白了就是类似于两个指针,模拟链表的头和尾,每当写入一个数据,next_record就会指向新的,就和链表的新增一样,最形成一个单链表。

页的目录

结构图

这里需要注意的点

先看右边:

  1. 最小行是单独一个组
  2. 数据进行分组的时候每个组可以存8条,超过就会分一个新的组
  3. 最大行是在最后一个组的最下面

再看左边:

蓝色那里有三个槽位,槽是怎么产生?

槽的产生和分组是密切相关的,只要产生了分组这个动作,就会自动产生一个槽,他会记录下来分组最后的那条记录,同时会把他的主键值给记下来,有多少个分组就有多少个槽位。

假设要查找一个主键是6的,

首先会找到这个页,然后去找到槽,然后再从分组里面找到改记录。

数据页头

B+树在mysql中的使用

叶子节点存储真实数据,非叶子存储索引,其次在B+树中叶子节点是构成双向循环链表的,在查找某个索引时,先判断根节点,然后在判断大小,之后再去寻找到对应的数据,这个和树的高度是有关系的

计算三层B+树存放记录

首先,因为我们知道,一页的默认大小是16kb,索引页存放的主键值是bigint类型的就是8个byte,下一个地址是6byte,也就是一条索引占14个byte,

一页的大小是16*1024= 16384,如果一页全部放索引(根节点)也就是可以放16384/14=1170个索引,那二层每一个也可以放1170个索引,也就是1170*1170=1368900个索引,第三层每个索引又能放16个数据也就是1368900*16=21902400条数据,这个过程只执行了三次oi,索引页会被缓存在内存,查询一条没查过的实际上只要一次真实的oi就可以。

http://www.dtcms.com/a/617748.html

相关文章:

  • 企业架构:数字化转型时代业务与IT的战略连接器
  • 【解决】RESP.app GUI for Redis 连接不上redis服务器
  • PyTorch入门学习: 加载数据
  • Reactor反应堆
  • 【C++】C++11:智能指针
  • 把网站做成手机版创意设计师
  • 条件前缀|同余优化|栈
  • 做淘客app要网站吗大数据精准营销策略
  • 对于数据结构:链式二叉树的超详细保姆级解析—中
  • 多模态大模型对齐陷阱:对比学习与指令微调的“内耗“问题及破解方案
  • 关键词解释:F1值(F1 Score)
  • 大语言模型入门指南:从科普到实战的技术笔记(2)
  • 【RL-LLM】Self-Rewarding Language Models
  • Redis学习笔记-List列表(2)
  • 区块链与以太坊基础:环境搭建与智能合约部署
  • 二维码怎么在网站上做推广微信商店小程序制作教程
  • 毕业设计可以做哪些网站电子商务网站建设前期规划方案
  • Linux 磁盘挂载管理
  • 智能体知识库核心技术解析与实践指南——从文件处理到智能输出的全链路架构v1.2
  • 【Java 基础】 2 面向对象 - 构造器
  • dw6做网站linux做网站服务器那个软件好
  • 生成式人工智能赋能教师专业发展的机制与障碍:基于教师能动性的质性研究
  • 无锡锡山区建设局网站北京网站定制建设
  • 【Word学习笔记】Word如何转高清PDF
  • 小程序地图导航,怎样实现用户体验更好
  • 下流式接入ai
  • PDF无法打印怎么解决?
  • 南宁市网站建设哪家好企业网站模板html
  • 华为数据中心CE系列交换机级联M-LAG配置示例
  • 【HarmonyOS】性能优化——组件的封装与复用