MYSQL
2025-08-13 01:39:45 3 举报
AI智能生成
MYSQL笔记
作者其他创作
大纲/内容
Mysql架构
SELECT执行流程
执行流程图
连接器
负责客户端连接管理、身份验证和权限校验
工作流程
建立连接:处理客户端连接请求
身份验证:验证用户名/密码
权限检查:验证用户对目标数据库的操作权限
连接管理:维护连接池,处理长连接/短连接
长连接:连接成功后,如果客户端持续有请求,则一直使用同一个连接。
短连接:每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。
查询缓存
缓存查询结果,提高相同查询的响应速度。MySQL 8.0已移除
查询缓存使用全局锁,高并发时争抢锁导致性能下降
表数据一旦修改,相关缓存全部失效
缓存管理消耗 CPU/内存,但收益低,甚至拖慢整体性能
并行查询、分布式架构难以适配旧的查询缓存设计
Redis、ProxySQL、InnoDB Buffer Pool 等更高效
工作流程
收到查询后先检查缓存
命中缓存则直接返回结果
未命中则继续后续处理
分析器
进行SQL语法解析和语义分析
工作流程
词法分析:将SQL语句拆分为token(关键字、表名、列名等)
语法分析:检查SQL语法是否正确
语义分析:验证表、列是否存在,检查数据类型是否匹配
优化器
生成最优执行计划
工作流程
基于统计信息评估不同执行计划的成本
决定使用哪个索引
确定多表连接的顺序
优化WHERE条件处理顺序
生成最终执行计划
执行器
执行查询并返回结果
工作流程
调用存储引擎接口获取数据
根据执行计划逐步执行操作
处理JOIN、排序、聚合等操作
返回最终结果集给客户端
存储引擎
数据存储管理
负责数据的物理存储格式
管理数据文件在磁盘上的组织和布局
处理表空间、数据页等底层存储结构
数据访问接口
提供统一的API供Server层调用(Handler API)
实现"索引组织表"或"堆组织表"等不同存储模型
处理数据的读写操作
事务支持
实现ACID特性(原子性、一致性、隔离性、持久性)
管理事务日志(如InnoDB的redo log)
处理锁机制(行锁、表锁等)
索引实现
实现不同类型的索引结构(B+树、哈希、全文索引等)
管理索引的创建、维护和使用
优化索引查找效率
缓存管理
管理缓冲池(Buffer Pool)
实现数据的缓存策略
处理脏页刷新等操作
Redo Log (重做日志)
基本概念
InnoDB 引擎的物理日志,确保事务持久性和崩溃恢复
核心特性
物理日志
记录的是"在某个数据页上做了什么修改"
循环写入
固定大小,循环覆盖使用
崩溃恢复
确保已提交事务的数据不会丢失
WAL(Write-Ahead Logging 预写式日志)
先写日志,再写磁盘
工作原理
Binlog (二进制日志)
基本概念
Binlog 是 MySQL Server 层的日志,记录所有更改数据的 SQL 语句(或行变更)
核心特性
逻辑日志
记录的是SQL语句或行变化
追加写入
文件大小超过阈值会切换新文件
主从复制
用于数据同步
数据恢复
可用于时间点恢复
两阶段提交流程
Update执行流程
索引底层数据结构
索引的本质
索引是帮助MySQL高效获取数据的排好序的数据结构
索引数据结构
二叉树
红黑树
Hash
对索引的key进行一次hash计算就可以定位出数据存储的位置
很多时候Hash索引要比B+ 树索引更高效
仅能满足 “=”,“IN”,不支持范围查询
hash冲突问题
B-Tree
叶节点具有相同的深度,叶节点的指针为空
所有索引元素不重复
节点中的数据索引从左到右递增排列
B+Tree
非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
叶子节点包含所有索引字段
叶子节点用指针连接,提高区间访问的性能
存储引擎索引实现
MyISAM
索引文件和数据文件是分离的(非聚集)
MYD是数据文件
MYI是索引文件
InnoDB
表数据文件本身就是按B+Tree组织的一个索引结构文件
聚集索引-叶节点包含了完整的数据记录
非聚簇索引:叶子节点存储主键值(需要回表)
范围查找
为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键?
为什么非主键索引结构叶子节点存储的是主键值

收藏

收藏
0 条评论
下一页