MySQL八股学习历程3MySQL数据页的格式from小林coding

MySQL八股学习历程3MySQL数据页的格式from小林coding

InnoDB数据页

InnoDB 的数据是按数据页为单位来读写的,每个数据页大小默认为16KB,数据页的格式如下图
InnoDB数据页格式
InnoDB页各项作用
文件头中有两个指针,指向上一个数据页和下一个数据页,使得页面连接成一个链表,数据页中的记录按照主键的顺序组成一个单向链表,为了提高效率,InnoDB为这些记录分了组,并且用一个指针指向这些组,称之为槽,整个结构如下,这些指针被放到页目录的位置中
页目录结构示意图
为了链表过长,导致顺序查询的复杂度过大,InnoDB对每个链表的长度做了如下限制

  • 第一个分组中的记录只能有 1 条记录;
  • 最后一个分组中的记录条数范围只能在 1-8 条之间;
  • 剩下的分组中记录条数范围只能在 4-8 条之间

MySQL单表建议数据承载量探究

InnoDB的B+树节点种类,非叶子节点存储索引,那么InnoDB的分叉数等于
X = ( T o t a l S i z e − N o t D a t a S i z e ) ÷ i n d e x S i z e X = (TotalSize - NotDataSize)\div indexSize X=(TotalSizeNotDataSize)÷indexSize
其中假设主键为bigint类型,那么一个bigint占8byte, 页号为固定的4Byte,indexSize为12B,页大小totalSize为16KB,上面页中除了用户记录大概占据1KB的内存
则叉数X约等于1280
一般而言MySQL的B+树索引层高不大于3,那么单表的数据承载最大量建议值为
Y = X 2 × ( T o t a l S i z e − N o t D a t a S i z e ) ÷ ( s i n g l e R o w S i z e ) Y = X^2 \times (TotalSize - NotDataSize) \div (singleRowSize) Y=X2×(TotalSizeNotDataSize)÷(singleRowSize)
超过这个上限,MySQL的查询时间将会激增

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值