InnoDB原理
crud
的时候,都会从磁盘上加载数据页到Buffer Pool
的缓存页里去,更新缓存页后,由异步线程刷回磁盘的数据页。
所以MySQL
进行数据操作的最小单位是数据页,接下来就分析分析,数据页到底长什么样。
每个数据页默认16kb
的大小,数据页由多个部分组成
文件头:存放了特别多的信息,如当前页号、页类型、所属表空间、上一页号、下一页号等等。
数据页目录:数据页目录存储的内容就是主键ID
和行位置。
空闲空间:
其实数据页还未写入数据时,是没有数据行的,只有空闲空间,一旦写入,空闲空间会减少一些,直到空闲空间耗尽
双向链表:
所以数据页是通过上下页号,组成双向链表
数据页内部会存储一行一行的数据,每一行数据都会按照主键大小进行排序存储,同时每一行数据都有指针指向下一行数据,组成单向链表。
数据页目录
索引页:
索引页,顾名思义,就是存储索引信息的数据页,在数据页的文件头部,有页类型来进行区分。
索引页会存储两类内容,一类是最小主键值与索引页号,另一类是最小主键值与数据页号。