MySQL 的数据存储和查询原理涉及多个层面,从物理存储到逻辑查询优化,下面分两部分简要说明,并结合示例辅助理解。
一、数据存储原理
MySQL 的数据存储以 表 为逻辑单位,物理上通过文件系统存储,核心依赖存储引擎(如 InnoDB、MyISAM 等,默认是 InnoDB)。
- 存储引擎的作用
- 存储引擎负责数据的物理组织、索引管理、事务支持等。以 InnoDB 为例:
- 数据按 表空间(tablespace) 存储,默认使用系统表空间(ibdata1),也可配置为独立表空间(每个表对应 .ibd 文件)。
- 表中的数据按 B+ 树 结构组织(聚簇索引),叶子节点存储完整的行数据,非叶子节点为索引键和指针。
- 数据行的存储
- InnoDB 中,每行数据包含隐藏列(如 DB_ROW_ID 行标识、DB_TRX_ID 事务 ID、DB_ROLL_PTR 回滚指针),用于事务和 MVCC(多版本并发控制)。
- 示例:创建一张表后,InnoDB 会自动为其生成聚簇索引(一般是主键),数据按主键顺序在 B+ 树中排列。
- sql
- CREATE TABLE user ( id INT PRIMARY KEY, — 聚簇索引键 name VARCHAR(50), age INT );
- 插入数据后,行数据会按 id 顺序存储在 B+ 树的叶子节点。
二、查询原理
查询的核心是 高效定位数据,依赖索引和查询优化器,大致流程如下:
- 解析与优化MySQL 第一对 SQL 进行语法解析,生成语法树。优化器(基于成本和规则)选择最优执行计划,例如是否使用索引、join 顺序等。
- 索引的使用若查询条件命中索引(如 WHERE id=10),直接通过 B+ 树快速定位数据(时间复杂度 O (log n))。若未命中索引,会进行 全表扫描(逐行检查条件),效率较低。
- 示例:对 user 表查询 id=5 的数据
- 因 id 是主键(聚簇索引),MySQL 直接通过 B+ 树定位到对应叶子节点,获取整行数据。
- 若查询 name='张三' 且未对 name 建索引,则会扫描所有行逐一比对。
- 事务与锁机制
- InnoDB 通过锁(如行锁、表锁)和 MVCC 保证并发查询的数据一致性。例如,修改一行数据时,会对该行加锁,防止其他事务同时修改。
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END




















暂无评论内容