⭐ ミクの日2026 / miku(pid:142082315 )⭐

高性能MySQL 阅读笔记
阅读前
虽然起因是为了针对面试,但还是想完整的学习下关于 MySQL 的知识。从只会写 sql 代码,到知道 MySQL 具体是个什么东西。
然后根据推荐,选择了《高性能MySQL》这本书,被评价为数据库相关工作者的必读书目。
这本书最新版是第四版,基于 mysql8.0 的,但图书馆没有。而第三版,基于 mysql5.x 的。这两个也是 MySQL 使用量最多的版本了,故这两版我都打算读一遍。
两版的 pdf 我都找到了,但第三版在图书馆有实体书,故就先阅读这本。
阅读中
第三版
前言
这本书的整体结构,前几章,概述(第一章),基准测试(第二章),问题分析方法(第三章),关于 MySQL 各方面的设计(4-6),优化(配置、硬件配置、复制、可扩展性、优化)(8-14),其他(16、附录)。
重点阅读前 6 章,有了初步的了解,之后的章节速读,能作为工具书查表就行。
第 1 章,MySQL 架构与历史
1.1 – 1.3.4
-
1.1: 架构图:网络层,MySQL 服务层,存储引擎层
-
1.1.1:每个客户端连接都会分配一个线程。客户端连接时,会有安全认证。
-
1.1.2:MySQL 处理请求时,会先解析请求,并进行优化。explain 关键字[^1]。优化器。查询缓存。
-
1.2:并发
-
1.2.1:为解决并发问题:共享锁/读锁,排他锁/写锁。
-
1.2.2:锁粒度。锁策略^2:表锁,行锁
-
1.3:事务。相关的 ACID 概念:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。
-
1.3.1:隔离级别:提交读(READ UNCOMMITTED)(脏读)、提交读(READ COMMITTED)、可重复读(REPEATABLE READ)(幻读)、可串行化(SERIALIZABLE)。
存在两种查询,select * fome,与 update * where,前者属于快照读,后者属于当前读(再写),而在 RR 中,事务在第一次查询中建立快照,后续查询都基于这个快照进行,解决了不可重复读的问题,但是 update 的查询,仍然是在原数据中查询,故仍然存在幻读的问题。
解决方案是间隙锁,在当前读时锁住读取的间隙(区间,包含未有的数据)。
-
1.3.2:死锁。处理方法是将其中一个(代价小的)事务进行回滚。
-
1.3.3:事务日志。数据分为内存数据与磁盘数据,写操作会更改内存数据,后将操作记录写入事务日志中,事务日志存在硬盘中。
阅读后
现在已经看完了,全程下来是比较基础的概念,感觉适合的确实是新手,还是初接触编程的。而且距离看完到现在已经有点久了,所以内容忘的差不多了。另外,关于阅读中这一项目的记录,先鸽了,感觉做的不怎么好,后续有想法,会进行补充的。
那么,以上。
脚注
[^1]: explain 可以查看 sql 执行时是否有使用到索引,关联查询时可以查看 sql 的执行顺序。
