MYSQL
2025-08-13 01:39:45 5 举报
AI智能生成
MYSQL笔记
作者其他创作
大纲/内容
Mysql架构
SELECT执行流程<br>
执行流程图
连接器
负责客户端连接管理、身份验证和权限校验
工作流程
建立连接:处理客户端连接请求
身份验证:验证用户名/密码
权限检查:验证用户对目标数据库的操作权限
连接管理:维护连接池,处理长连接/短连接
长连接:连接成功后,如果客户端持续有请求,则一直使用同一个连接。
短连接:每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。
查询缓存
缓存查询结果,提高相同查询的响应速度。MySQL 8.0已移除<br>
查询缓存使用全局锁,高并发时争抢锁导致性能下降
表数据一旦修改,相关缓存全部失效
缓存管理消耗 CPU/内存,但收益低,甚至拖慢整体性能
并行查询、分布式架构难以适配旧的查询缓存设计
Redis、ProxySQL、InnoDB Buffer Pool 等更高效
工作流程
收到查询后先检查缓存
命中缓存则直接返回结果
未命中则继续后续处理
分析器
进行SQL语法解析和语义分析
工作流程
词法分析:将SQL语句拆分为token(关键字、表名、列名等)
语法分析:检查SQL语法是否正确
语义分析:验证表、列是否存在,检查数据类型是否匹配
优化器
生成最优执行计划
工作流程
基于统计信息评估不同执行计划的成本
决定使用哪个索引
确定多表连接的顺序<br>
优化WHERE条件处理顺序
生成最终执行计划
执行器
执行查询并返回结果
工作流程
调用存储引擎接口获取数据
根据执行计划逐步执行操作
处理JOIN、排序、聚合等操作
返回最终结果集给客户端
存储引擎
数据存储管理
负责数据的物理存储格式
管理数据文件在磁盘上的组织和布局
处理表空间、数据页等底层存储结构
数据访问接口
提供统一的API供Server层调用(Handler API)
实现"索引组织表"或"堆组织表"等不同存储模型
处理数据的读写操作
事务支持
实现ACID特性(原子性、一致性、隔离性、持久性)
管理事务日志(如InnoDB的redo log)<br>
处理锁机制(行锁、表锁等)
索引实现
实现不同类型的索引结构(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组织的一个索引结构文件
聚集索引-叶节点包含了完整的数据记录
非聚簇索引:叶子节点存储主键值(需要回表)
范围查找<br>
为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键?
为什么非主键索引结构叶子节点存储的是主键值
收藏
收藏
0 条评论
下一页