什么是页?

  • 页是InnoDB中管理数据的最小单元
  • 页与页之间是通过一个双向链表连接起来。

页的组成

FileHeader



  • 上一页下一页的指针

    • FIL_PAGE_PREV
    • FIL_PAGE_NEXT
PageHeader

Infimum & Supremum Records

会记录当前页最大最小记录

User Records

随着系统运行,数据产生,User Records 中的数据会不断的膨胀,相应的 Free Space 空间会慢慢的变小。

  • 按照插入顺序来排队的,先到的数据在前面,后来的数据在后面
  • User Records 中的行数据之间的单链表形成了一个按照 Primary Key排列的顺序。
Free Space

Free Space 没空间了,则说明需要申请新的页了

Page Directory

MySQL 会在新增数据的时候就将对应的 Slot 创建好,有了 Page Directory ,就可以对一张页的数据进行粗略的二分查找。至于为什么是粗略,毕竟 Page Directory 中不是完整的数据,二分查找出来的结果只能是个大概的位置,找到了这个大概的位置之后,还需要回到 User Records 中继续的进行挨个遍历匹配。

File Trailer

这块主要是为了防止页在刷入磁盘的过程中,由于极端的意外情况(网络问题、火灾、自然灾害)导致失败,而造成数据不一致的情况,也就是说形成了脏页。

一页能存储多少数据

页的默认大小为16kb,假设主键 ID 为 bigint 类型,长度为 8 字节,而指针大小在 InnoDB 源码中设置为 6 字节,这样一共 14 字节,我们一个页中能存放多少这样的单元,其实就代表有多少指针,即 16384/14=1170。所以我们每个非叶子结点最多有1170个子节点。

那么可以算出一棵高度为 2 的 B+ 树,能存放 117016=18720 条这样的数据记录。

根据同样的原理我们可以算出 一个高度为 3 的 B+ 树可以存放: 1170
1170*16=21902400 (2100万)条这样的记录。

最新文章

  1. mybatis generator.xml 配置 自动生成model,dao,mapping
  2. 新浪微博AppKey大集合(share)
  3. AngularJs bower install 卡主不动解决办法
  4. 前端这条路怎么走,作为一名后端er,说说我的见解
  5. NOIP2006金明的预算方案[DP 有依赖的背包问题]
  6. // 开始无限播放 ViewPager
  7. Zend Framework 入门(1)—快速上手
  8. 块设备驱动之NAND FLASH驱动程序
  9. 关于AfterLogic WebMail 的.net版无法上传控件的解决办法
  10. Docker Machine
  11. oldboy第二天学习
  12. freemarker报错之八
  13. php soap调用asp.net webservice
  14. linux 常用端口
  15. window.location获取URL中各部分
  16. java学习(二)多态中成员变量详解
  17. BZOJ 3551: [ONTAK2010]Peaks加强版 [Kruskal重构树 dfs序 主席树]
  18. Php的基本语法学习
  19. # 2017-2018-2 20155319『网络对抗技术』Exp6:信息收集与漏洞扫描
  20. rpm 安装zabbix 注意

热门文章

  1. Filter中的FilterChain.doFilter(req,resp)的报错解决
  2. KingbaseES的SQL语句-CTE递归
  3. gin如何多次shoubind一个请求参数
  4. Linux Netlink学习笔记
  5. LFS(Linux From Scratch)构建过程全记录(五):交叉工具链的构建
  6. 003-simonyanVeryDeepConvolutional2015(VGG)
  7. Redis变慢?深入浅出Redis性能诊断系列文章(一)
  8. 关于指针初始化为NULL的一些问题
  9. JAVA SE 基础总结
  10. 人脸识别、活体检测(眨眼、摇头、张嘴动作)clmtrackr