对MySQL底层索引深度解析( 三 )


当相邻两个页由于删除了数据,利用率很低之后,会将数据页做合并 。合并的过程,可以认为是分裂过程的逆过程 。
三、innodb 数据页在上述中我们提到数据页,数据页的概念,它是MySQL管理存储空间的基本单位,一个页的大小一般是16KB,并且我们知道了记录其实是被存放在页中的,如果记录占用的空间太大还可能造成行溢出现象,这会导致一条记录被分散存储在多个页中 。
页的本质就是一块16KB大小的存储空间,InnoDB为了不同的目的而把页分为不同的类型,其中用于存放记录的页也称为数据页,我们先看看这个用于存放记录的页长什么样 。数据页代表的这块16KB大小的存储空间可以被划分为多个部分,不同部分有不同的功能,各个部分如图所示:

对MySQL底层索引深度解析

文章插图
 
从图中可以看出,一个InnoDB数据页的存储空间被划分成了7个部分,每个部分又可以被划分为若干小部分 。
下面用数据页来分析innodb索引数据.
对MySQL底层索引深度解析

文章插图
 
我们已主键索引为例子,每一页默认大小16k,当我们第一页用户数据区域页满了的时候 就会进行申请新的页也就是第二页 然后有新的数据插入时候会在第二页中存入我们的用户数据比如如图中的R4,涉及到这种数据的检索页内的数据是类似一个链表,页与页之间也是链表,当数据量大的时候其实性能比较差的,这个时候我们需要引入页目录的概念 。
对MySQL底层索引深度解析

文章插图
 
当有了页目录之后检索性能会提升很多,但是如果页很多的时候其实性能也会存在弊端,那这个时候需要如何处理呢,这个时候我们需要在上层在加入页目录的一个链表 。
原文:
https://segmentfault.com/a/1190000040278249




推荐阅读