MySQL 存储引擎原理

MySQL

1、MySQL存储引擎原理

1.1 MySQL 记录存储

image-20211118212416725

  • 页头

记录页面的控制信息,共占 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 协议 ,转载请注明出处!