数据库文件系统

表空间由段segment  区extent  页page组成。

数据存在页中

表空间由数据段、索引段、回滚段等段组成。

InnoDB的存储引擎表是索引组织的,索引即数据,数据即索引;数据段即为B+树的叶子节点 

区是由连续的也组成的空间,每个区大小1M,为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4-5个区。默认情况下存储引擎也大小为16K,一个区中共有64个连续的页,而表字刚申请的时候,会先用32个页大小的碎片页来存放数据。

页也可以称为块,页是InnoDB磁盘管理最小的单位,它的大小是影响索引树高度的一个因素。

InnoDB存储引擎是面向列的(row-oriented),也就是说数据是按行进行存放的,每个页存放的行记录也是有硬性定义的,最多允许存放16K/2-200行的记录,即7992行记录,在页内部是通过一种链表的结构来串联各个行记录的。

Redundant行记录格式和Compact行记录格式,现在一般都是用Compact格式,后面还有其他格式。

Page Directory页目录存放了记录的相对位置,不是偏移量,它是一个稀疏目录

B+树索引本身并不能找到具体的一条记录,只能找到该记录所在的页,数据库把页加载入到内存,然后通过Page Directory再进行二叉查找,只不过二叉查找的时间复杂度很低,内存中很快,通过会忽略这部分查找的时间。


数据页上存放的是完整的每行记录,而在非数据页的索引页中,存放的仅仅是键值及指向数据页的偏移量。

聚集索引的存储并不是物理连续的,而是逻辑连续的,这其中有两点:

一是前面说过的也通过双向链表链接,页按照主键的顺序排序

二是每个页中的记录也是通过双向链表进行维护的。

辅助索引也称非聚集索引

叶子节点并不包含行记录的全部数据。叶子节点除了包含键值以外,每个叶子节点中的索引行中还包含了一个书签(bookmark);

当通过辅助索引寻找数据时,InnoDB存储引擎会遍历辅助索引并通过叶级别的指针获得指向主键索引的主键,然后通过主键索引来找到一个完整的行记录,所以查询时辅助索引需要更多的IO次数。

猜你喜欢

转载自blog.csdn.net/skymouse2002/article/details/80843950