MySQL 存储引擎原理
MySQL
1、MySQL存储引擎原理
1.1 MySQL 记录存储
- 页头
记录页面的控制信息,共占 56 字节,包括也得左右兄弟页面指针,页面空间使用情况等
- 虚记录
最大虚记录:比页内最大主键还大
最小虚记录:比页内最小主键还小
- 记录堆
行记录存储区,分为有效记录和已删除记录,每个记录大小都可能不相同
- 自由空间链表
已删除记录组成的链表
- 未分配空间
页面为使用的存储空间
- 页尾
页面最后的部分,占 8个字节,主要存储页面的校验信息
1.2 页内记录维护
- 顺序保证
物理有序:每次插入新的数据的时候,都会进行数据的移动,例如一个链表为【7,8,10】
,当我们需要插入 9 的时候,需要把 10 后移一位,然后把 9 插入。这样会当我们进行查询的时候会非常方便,因为都在一块连续的内存空间中,并且数据是有序的,但是删除、更新、插入都会造成极大的性能消耗
逻辑有序:每次插入新的数据的时候,只需要将链表的指针指向新的数据即可。例如 【7,8,10】
,当我们需要插入 9 的时候,只需要将 8 的后指针从 10 指向 9,然后将 9 的后指针指向 10即可,这样做会减少性能的消耗,同时达到较好的数据操作效果。不过此时数据并不在一块连续的内存空间中,所以查询效率不如物理有序。但 MySQL仍选择这种方式作为顺序保证
- 插入策略
自由空间链表:当数据被删除后会出现自由空间,但是这些自由空间的数据并不是被物理删除,因为物理删除也会造成资源消耗,所以删除后只会增加一个删除标识,标志着这块空间可以被新数据覆盖。
未使用空间:当页面不存在自由空间链表后及使用未使用空间
- 页内查询
遍历:
二分查找:使用
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!