当前位置: 首页 > news >正文

深入理解MySQL基本原理和架构

🚀 一、MySQL 整体架构(从宏观到微观)

MySQL 主要由 Server 层存储引擎层(InnoDB) 组成。

┌──────────────────────────────┐
│         Server 层             │
│  SQL解析、优化器、执行器、缓存 │
└──────────────────────────────┘↓
┌──────────────────────────────┐
│        存储引擎层 (InnoDB)    │
│ Buffer Pool、Redo、Undo、索引  │
└──────────────────────────────┘

Server 层负责“逻辑”

  • 连接管理(线程池)
  • SQL 解析器(词法/语法分析)
  • 优化器(决定走哪个索引、Join 顺序)
  • 执行器(真正执行)
  • 缓存(如 Query Cache 已废弃)

InnoDB 引擎负责“存储 + 事务”

  • 页(Page)机制(16KB)
  • Buffer Pool(内存读写缓存)
  • Redo Log(崩溃恢复)
  • Undo Log(MVCC/回滚)
  • B+Tree 索引
  • 事务隔离级别

📌 面试重点:Server 层做执行逻辑,InnoDB 才是存储和事务的核心。


🚀 二、查询执行的完整流程(你必须背下来)

你执行:

SELECT * FROM user WHERE id = 1;

MySQL 内部做了什么?

1. 连接器

认证、权限、线程分配。

2. 查询缓存(已废弃)

MySQL 8 已移除,直接跳过。

3. 解析器

把 SQL 转为 AST(抽象语法树),检查语法、列名是否存在。

4. 优化器

决定:

  • 走哪个索引
  • 用全表扫描还是索引扫描
  • Join 的顺序
  • 是否使用覆盖索引

5. 执行器

根据优化器计划,从存储引擎层取数据。

6. 存储引擎

从 Buffer Pool 或磁盘读取数据页,并返回给执行器。


面试必答点:优化器只是制定计划,真正取数据的是存储引擎。


🚀 三、InnoDB 的核心:页、行、索引

1)数据以 Page 为单位(16KB)

为什么要懂?

  • 索引建立
  • 回表次数
  • 全表扫描 cost
  • 大字段影响性能

所有记录都存在 Page 中,读取数据要读整个 16KB 页。

2)行格式(Compact/Dynamic)

涉及:

  • varchar 行溢出
  • off-page 存储
  • 大字段影响页分裂

3)索引是 B+Tree

主键索引(聚簇索引)和二级索引(非聚簇索引)。

聚簇索引

  • 主键顺序存储
  • 叶子节点存真实行数据

二级索引

  • 叶子节点存的是主键值
  • 因此需要回表

覆盖索引可以避免回表,是优化的重要手段之一。


🚀 四、Redo Log 与 Undo Log(事务的灵魂)

搞不懂这两个,你永远理解不了 MySQL 的写入原理。


⭐ Redo Log —— 保证“崩溃恢复”

写入一条记录时:

  1. 修改 Buffer Pool 的数据页(内存)
  2. 写入 Redo Log(顺序 IO)
  3. 事务提交成功
  4. 后台刷盘把脏页写到磁盘(异步)

为什么要有 Redo?
因为随机 IO 太慢,所以不直接写磁盘,通过“顺序写 redo log”减少 IO。

核心机制:WAL(Write-Ahead Logging)


⭐ Undo Log —— MVCC 和回滚的基础

Undo 用于:

  • 事务回滚
  • 快照读(MVCC)可见性判断

每一次更新会写 Undo,记录旧值。

MVCC 依赖:

  • undo log
  • trx_id
  • roll_pointer
  • ReadView

你刷 MySQL 面试题看到的“RC、RR 区别”其实就是 ReadView 生成时机不同。


🚀 五、Binlog(主从复制的基础)

Binlog 是 Server 层的日志,用于:

  • 主从复制
  • 数据恢复(基于时间点恢复)

与 Redo 的关键区别:

Redo Log Binlog
层级 InnoDB 引擎层 Server 层
作用 崩溃恢复 主从复制 / 灾备
写入方式 循环写(固定大小) 顺序追加(无限扩展)
是否物理日志 物理日志 逻辑日志(记录 SQL 或行变更)

一致性依赖 —— 两阶段提交(2PC)
解决:redo 成功写了,但 binlog 写失败导致主从不一致。


🚀 六、事务隔离与锁

你必须理解 RC、RR、Serializable 本质区别:

隔离级别 读问题 MySQL 行为
Read Uncommitted 脏读 不推荐
Read Committed 不可重复读 Oracle 默认
Repeatable Read 避免不可重复读 MySQL 默认 + MVCC
Serializable 强一致 性能差

InnoDB 通过:

  • MVCC(快照读)
  • 锁(当前读)

来保证隔离性。


🚀 七、为什么 MySQL 能抗住上万 QPS?

关键点:

  1. Buffer Pool:缓存热点页,绝大部分读不落盘
  2. Redo Log(WAL):顺序写,写入快
  3. B+Tree 索引:层级低,查找快
  4. 主从 + 读写分离:扩展读能力
  5. 连接池 / 线程池:减少连接开销

🚀 总结一张图(核心知识一图掌握)

Client↓
Server 层解析器 → 优化器 → 执行器↘           ↑Binlog     |↓
InnoDB 引擎Buffer PoolRedo Log / Undo LogB+Tree 索引页组织、事务、锁
http://www.jsqmd.com/news/64024/

相关文章:

  • 深入浅出Mybatis - 详解
  • 2025 年 12 月折弯机折边机厂家权威推荐榜:自动/数控/大型/全自动/铜排/异形折边机,实力工厂精准选型与高效加工解决方案
  • 2025年装配式建筑房屋材料制造/安装公司排行榜,精选技术强
  • RustDesk安装部署
  • 2025 年 12 月电动隔断厂家权威推荐榜:智能活动隔断/高端玻璃隔断/移动隔音隔板,创新设计与场景适配深度解析
  • 2025 年 12 月油漆品牌权威推荐榜:环保漆、工业漆、木器漆、墙面漆,源头厂家精选与性能深度解析
  • 2025年液化气专用干式快速接头厂商推荐:干式快速接头供应企
  • 2025年五大靠谱本国端口锁企业推荐,专业的usb端口锁与信
  • 轻松上手:使用 Vercel 部署 HTML 页面教程 - 实践
  • redis集群下如何启用lua脚本
  • 2025 年 12 月桥架型材厂家权威推荐榜:铝合金/不锈钢/热镀锌桥架,大跨距线槽与专用型材实力品牌深度解析
  • 2025年中国优质滑板公园设计工作室推荐:靠谱的滑板公园设计
  • 2025年五大GEO源头厂家推荐排行榜,创新能力强+性价比高
  • 2025 年 12 月旋转接头厂家权威推荐榜:高温/高压/高速/液压/蒸汽/导热油/水用多品类精密密封解决方案深度解析
  • 2025年12月角接触球轴承厂家权威推荐榜:精密/推力/不锈钢/密封/超高速/低噪音/机器人专用等全系列轴承深度解析与选购指南
  • 2025 年 12 月制氮机厂家权威推荐榜:PSA制氮机装置,模组制氮机,氨气净化干燥装置,高效节能与稳定供气深度解析
  • 2025年度桥梁护栏专业厂家TOP5权威推荐:甄选企业助力基
  • IntelliJ IDEA license server 激活(亲测有效)
  • 2025年上海五大靠谱的代理记账公司推荐,实力不错的代理记账
  • 2025 年 12 月合肥搬家公司权威推荐榜:专业团队与高效服务,覆盖包河区、蜀山区等全市范围的正规搬家公司精选
  • 2025 年 12 月薄膜包衣厂家权威推荐榜:药用包衣粉/预混辅料/包衣剂,创新工艺与稳定品质的行业标杆之选
  • 2025年12月喷码机厂家权威推荐榜:全自动/小字符/高解析/油墨喷码机,智能赋码与高效生产解决方案精选
  • 2025年中国受欢迎的GEO源头厂家排名:客户认可的GEO源
  • 2025年度合肥无人机培训课程TOP5推荐:安徽新东方教学模
  • 2025年12月料仓源头厂家实力推荐榜:专业定制、耐磨防堵与智能清仓技术领先企业深度解析
  • 2025 初中学习机品牌推荐:简单一百学习机,破解选机痛点,赋能初中进阶
  • 2025年五大工业安全锁具品牌排行榜,博士安全挂锁价格合理性
  • 2025年上海五大财税服务公司推荐:宝园财税专业可靠
  • PUBG Mobile 快捷键指令集大全
  • 2025 年 12 月珩磨机厂家权威推荐榜:球面/球头/髋关节磨削珩磨机,镜面抛光与超精加工机床实力解析