肯定是存储在文件中,那又是怎么做到可以通过索引快速查询?

1,每个数据库对应一个文件夹,文件夹名和库名相同;

2,(单独的表空间中) 每张表对应几个文件,文件名和表名相同,innodb引擎中对应两个文件,后缀名为:frm、ibd;

frm文件:存储的是表结构信息。

ibd文件:存储的是表里的数据、索引等。

mysql 文件存储字段 mysql存储文件方案_mysql 文件存储字段

ibd文件是关键所在,秘密都藏在其中;

ibd文件被分为连续的大小相同的区域,称为页(Page),大小默认值为16KB,可以设置。页的大小固定,格式固定。

mysql 文件存储字段 mysql存储文件方案_平衡树_02

mysql 文件存储字段 mysql存储文件方案_子节点_03

 

mysql 文件存储字段 mysql存储文件方案_mysql 文件存储字段_04


多个Page在一起构成一颗多路平衡树, Page作为树的节点, 在平衡树的基础上, 同一层的节点左右相连, 所以称为B+树;

树中: 非叶子节点保存主键和子节点的位置, 叶子节点保存完整的记录;

mysql 文件存储字段 mysql存储文件方案_子节点_05