MST
星途 面试题库

面试题:MySQL中表结构定义文件与存储引擎文件的关系是什么

请阐述MySQL里表结构定义文件(如.frm等相关文件)与存储引擎文件(如InnoDB的.ibd文件等)之间是如何相互协作、关联的,它们分别承担了哪些关键信息的存储和管理工作。
26.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

1. 表结构定义文件(.frm等)

  • 承担的关键信息存储和管理工作
    • 元数据存储:.frm文件主要存储表的元数据信息,包括表的结构定义,如列的名称、数据类型、长度、是否为NULL、默认值等。例如,对于一个users表,其name列定义为VARCHAR(255) NOT NULL,这些信息会记录在.frm文件中。
    • 索引定义:它还记录了表上所定义的索引信息,包括索引类型(如普通索引、唯一索引、主键索引等)、索引所包含的列等。例如,若在users表的email列上定义了唯一索引,此信息会保存在.frm文件中。
  • 与存储引擎文件的协作方式:.frm文件是MySQL数据库中较为通用的部分,不依赖于特定的存储引擎。它为不同存储引擎提供了表结构的统一定义。存储引擎在操作表数据时,会依据.frm文件中定义的表结构来理解数据的组织方式。比如,InnoDB存储引擎在读取或写入.ibd文件中的数据时,会参照.frm文件中定义的列信息,以正确解析和存储数据。

2. 存储引擎文件(以InnoDB的.ibd文件为例)

  • 承担的关键信息存储和管理工作
    • 数据存储:.ibd文件主要用于存储InnoDB表的数据。它以页(Page)为基本单位来组织数据,每个页大小默认为16KB。数据按行存储在这些页中,并且通过聚簇索引(通常是主键索引)来组织数据的物理存储顺序。例如,对于users表,每一行数据都会存储在.ibd文件的某个页中,并且按照主键值的顺序排列。
    • 索引数据存储:除了数据本身,.ibd文件还存储索引数据。聚簇索引的数据和数据行是存储在一起的,而非聚簇索引则存储指向聚簇索引的指针。例如,在users表上若有一个普通索引index_age,该索引的数据会存储在.ibd文件中,其叶子节点存储的是主键值和age列的值,通过主键值可以快速定位到数据行。
    • 事务相关信息:InnoDB是支持事务的存储引擎,.ibd文件会存储与事务相关的信息,如回滚段(rollback segment),用于在事务回滚时撤销未提交的修改。
  • 与表结构定义文件的协作方式:.ibd文件依赖于.frm文件中的表结构定义。当InnoDB存储引擎从.ibd文件中读取或写入数据时,需要依据.frm文件中定义的表结构来确定数据的格式和含义。例如,从.ibd文件中读取一行数据后,根据.frm文件中定义的列数据类型,将二进制数据解析为具体的数值、字符串等。同时,InnoDB在创建或修改表结构时,也会更新.frm文件以保持两者的一致性。