首页 > 数据库 > 数据库开发技术 > MySQL数据页的社会关系
最近被问到InnoDB引擎的数据页知识点,自己对这方面不是很了解,便想着学习一下相关的知识点,给自己充充电,以下是自己的一些学习总结,记录下来以备后时之需。
我们都知道在InnoDB存储引擎中,所有数据都被逻辑地存放在表空间中,即tablespace,表空间是InnoDB存储引擎中最高的存储逻辑单位,在表空间中包含多个段(Segment),一个段中又包含多个区(extent),一个区中又包含多个页(page),页是mysql中磁盘和内存交换的基本单位,默认为16KB,而一个页中有可以细分,每个页中有多个数据组,每个数据组中包含多条行记录。就类型下面这样子,可以这样类比,现在世界上最高的独立单位是国家,而国家下面有省,省下面有市,市下面有县等等。

上图中,数据区组对于段(Segment),数据区即对应于区(Extent),数据页对应于页(Page),数据组对应数据页中的槽(slot)。
好了,这就是InnoDB存储引擎的数据存储的整个大框架了,如果把表空间类比于国家,数据页可能只能算的上是个小村子,就从小村子说起吧,平时村与村之间需要沟通交流吧,数据页之间也是如此。那么数据页之间怎么沟通交流呢,答案就是双向链表。

通过双向链表,MySQL可以很方便且高效地进行范围查询。
接下来再说一下村子内部的事情吧,即数据页内部的结构,现在,先简单了解下吧,关于每个部分的内容和字段,后续再学习,哈哈。

其中,行记录中,多个行记录构成一个组,相邻的行通过指针关联,是下面这样的。

MySQL数据页的Page Directory部分会存放着一个个槽,每个槽指向当前组内最大记录的地址偏移量,通过这种方式,可以实现二分法快速查找,是不是又提高性能了呢。
好了,今天先学习到这,下次再继续了解更加细节的内容。
原文作者:DBA修行之路;如有侵权,请联系管理员删除。