MySQL数据存储详解

1. MySQL 的数据存放位置

        当我们在 MySQL 数据库中创建一个表时,MySQL 会在数据库对应的文件夹下生成三个文件:

1.1 db.opt 文件

  • 是什么:
    每个数据库都有一个 db.opt 文件,这个文件保存了数据库的配置信息。
  • 作用:
    记录数据库的字符集(character set)和排序规则(collation)。
  • 位置:
    位于数据库对应的目录中,比如 data/your_database/
  • 内容举例:
    假如你的数据库字符集是 utf8mb4db.opt 文件的内容可能是:
default-character-set=utf8mb4
default-collation=utf8mb4_general_ci

1.2 t_order.frm 文件

  • 是什么:
    frm 文件是表定义文件,保存了表的元数据(也就是表的结构信息)。
  • 作用:
    描述表的结构,例如表名、字段名、字段类型、索引等信息。
  • 注意:
    在 MySQL 8.0 及以后版本中,frm 文件被数据字典取代,表结构信息直接存储在系统表中。
  • 举例:
    如果我们创建表 t_order
CREATE TABLE t_order (
    order_id INT PRIMARY KEY,
    order_date DATE
);

t_order.frm 文件会包含 order_id 是主键,order_date 是日期类型等结构信息。

1.3 t_order.ibd 文件

  • 是什么:
    ibd 文件是 InnoDB 存储引擎的表空间文件,用于存储表的数据和索引。
  • 作用:
    保存了表的实际数据(行记录)和相关索引。
  • 特点:
    • 每个表对应一个独立的 ibd 文件,称为独立表空间模式
    • 表空间文件包含了表的数据和所有索引。
    • 默认情况下,ibd 文件位于与数据库同名的目录中,比如:data/your_database/t_order.ibd

2. 表空间文件的结构

        接下来,表空间文件(如 t_order.ibd)的存储结构是一个重点,它是由段(segment)区(extent)页(page)行(row) 组成的。我们会按以下顺序逐步展开说明:

  1. 段(Segment)
  2. 区(Extent)
  3. 页(Page)
  4. 行(Row)

2.1 段(Segment)

是什么:

段是表空间中存储数据的基本单位。

  • 每个表和索引在表空间中都有对应的段。
  • 一个段可以看作是为了存储某一类数据(比如表的数据、索引、undo 日志等)而分配的逻辑存储结构。

类型:

段主要分为三种类型:

  1. 数据段(Data Segment): 存储表的行数据。
  2. 索引段(Index Segment): 存储表中索引的数据。
  3. 回滚段(Rollback Segment): 存储事务中的 undo 日志,用于回滚或 MVCC(多版本并发控制)。

特点:

  • 一个段是由多个 区(Extent) 组成的。
  • InnoDB 会动态地为段分配更多的区来扩展存储。

运作流程:

  • 当一个表被创建时,InnoDB 会自动为该表分配一个初始的段。
  • 如果表的数据量增大且需要更多空间,InnoDB 会自动为段分配更多的区。

2.2 区(Extent)

是什么:

区是段中的次级逻辑分区,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值