一、mySql记录存储
我们都知道mysql 是以页的存储形式去存储的,每页占据16kb,具体页的结构可以看下面
页头:记录页面的控制信息,共占56字节,包括页的左右兄弟页面指针,页面空间使用情况等
虚记录:最大虚记录--比页内最大主键还大;最小虚记录:比页内最小主键还小
记录堆:行记录存储区,分为有效记录和已删除记录两种
自由空间链表:已删除记录组成的链表
未分配空间:页面未使用的存储空间
Slot区:槽位,连续的内存空间
页尾:页面最后部分,占8个字节,主要存储页面的校验信息;
二、页内记录维护
1.顺序保证:InnoDB逻辑有序,链表结构,数据通过单向链表,页与页之间是双向链表,插入快,查询只能遍历整个链表,所以查询慢
2.插入策略:用自由链表空间+未分配空间
3.页内查询:二分查找+遍历,类似于跳跃表,slot区, S1-Sn 分成n个槽位,之后用二分查找找到每个槽位对应的链表,链表之后遍历查找。如下图
下面是跳表的知识可以自行查看:https://zhuanlan.zhihu.com/p/68516038