mysql存储和查询原理

MySQL 的数据存储和查询原理涉及多个层面,从物理存储到逻辑查询优化,下面分两部分简要说明,并结合示例辅助理解。

一、数据存储原理

MySQL 的数据存储以 为逻辑单位,物理上通过文件系统存储,核心依赖存储引擎(如 InnoDB、MyISAM 等,默认是 InnoDB)。

  1. 存储引擎的作用
  2. 存储引擎负责数据的物理组织、索引管理、事务支持等。以 InnoDB 为例:
  3. 数据按 表空间(tablespace) 存储,默认使用系统表空间(ibdata1),也可配置为独立表空间(每个表对应 .ibd 文件)。
  4. 表中的数据按 B+ 树 结构组织(聚簇索引),叶子节点存储完整的行数据,非叶子节点为索引键和指针。
  5. 数据行的存储
  6. InnoDB 中,每行数据包含隐藏列(如 DB_ROW_ID 行标识、DB_TRX_ID 事务 ID、DB_ROLL_PTR 回滚指针),用于事务和 MVCC(多版本并发控制)。
  7. 示例:创建一张表后,InnoDB 会自动为其生成聚簇索引(一般是主键),数据按主键顺序在 B+ 树中排列。
  8. sql
  9. CREATE TABLE user ( id INT PRIMARY KEY, — 聚簇索引键 name VARCHAR(50), age INT );
  10. 插入数据后,行数据会按 id 顺序存储在 B+ 树的叶子节点。

二、查询原理

查询的核心是 高效定位数据,依赖索引和查询优化器,大致流程如下:

  1. 解析与优化MySQL 第一对 SQL 进行语法解析,生成语法树。优化器(基于成本和规则)选择最优执行计划,例如是否使用索引、join 顺序等。
  2. 索引的使用若查询条件命中索引(如 WHERE id=10),直接通过 B+ 树快速定位数据(时间复杂度 O (log n))。若未命中索引,会进行 全表扫描(逐行检查条件),效率较低。
  3. 示例:对 user 表查询 id=5 的数据
  4. 因 id 是主键(聚簇索引),MySQL 直接通过 B+ 树定位到对应叶子节点,获取整行数据。
  5. 若查询 name='张三' 且未对 name 建索引,则会扫描所有行逐一比对。
  6. 事务与锁机制
  7. InnoDB 通过锁(如行锁、表锁)和 MVCC 保证并发查询的数据一致性。例如,修改一行数据时,会对该行加锁,防止其他事务同时修改。
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容