1

我们已经知道了每一行的数据的格式,以及多行数据是紧凑的合并在一起。如果此时这个表的数据有一千万行,那我们进行查询的时候,效率是很低的,所以mysql就会把这些数据通过数据页的形式分割起来,类似于分组,查找的时候直接根据数据页的信息就知道是否存在某些数据。每个数据页的大小是16kb,所以一个数据页能存多少行数据,取决于这个行数据占用多少容量,比如一行就占用1kb,那这个数据页就有16行,如果一行只有0.1kb,那这个数据页就有160行,如果一行是20kb,那边需要2个数据页来存放。
image.png
当然数据页不仅仅只有我们的数据,还有其他信息。行通过数据头的next_record单向链表来指向下一个行的位置,数据页是维护一个双向链表来指向每个数据页的关系。除了这个,数据页还保护文件头、文件尾、数据页目录等信息。
image.png
每64个连续的数据页对应着一个数据区。每个数据区的大小就是64*16kb=1M。
image.png
在数据区的上面,还有一个数据区组,每一个数据区组保护了256个数据区,所以一个数据区组的大小是256M。
image.png
多个数据区组的数据,就是我们的ibd文件,比如我们表名是test,那磁盘上就有一个test.ibd文件。
image.png


大军
847 声望183 粉丝

学而不思则罔,思而不学则殆