- MySQL底层原理模糊:从记录存储、页结构、索引到事务锁,逐层剖析MySQL运行机制,让读者彻底理解底层原理。
- 索引设计与优化困难:深入讲解B+树索引结构、查询优化器、Explain执行计划,帮助读者设计高效索引。
- 事务与锁机制困惑:详细解析redo日志、undo日志、MVCC、各种锁的细节,解决并发场景下的疑难问题。
- 查询性能瓶颈:介绍单表查询、连接查询的执行原理与成本优化,帮助读者写出高性能SQL。
- 面试与工作常见问题:涵盖求职面试和工作中常见的核心概念,提供从根儿上的理解。
- MySQL初学者:希望从底层理解MySQL运行原理,而非只会写SQL的开发者。
- DBA与运维人员:需要深入理解MySQL内部机制,以便进行性能调优和故障排查。
- 后端开发工程师:工作中频繁使用MySQL,希望提升数据库设计与优化能力。
- 面试求职者:准备数据库相关岗位面试,需要系统掌握MySQL核心知识点。
- 技术爱好者:对数据库底层实现感兴趣,希望了解存储引擎、索引、事务的实现细节。
- 从第0章开始:先阅读楔子,了解本书的阅读方法和知识脉络,再按顺序学习。
- 重点研读第4-7章:InnoDB记录、页结构、B+树索引是理解MySQL的基础,务必吃透。
- 结合实践操作:在本地安装MySQL,边读边动手查看页结构、执行Explain,加深理解。
- 反复阅读事务与锁章节:第11-12章内容较难,建议多读几遍并画图梳理MVCC和锁的机制。
- 带着问题阅读:遇到工作中遇到的性能问题,可针对性查阅相关章节,学以致用。
- 彻底理解MySQL底层原理:掌握记录存储、页结构、索引、事务、锁等核心机制。
- 索引设计与优化能力:能够根据查询需求设计高效索引,并利用Explain分析执行计划。
- 事务与并发控制:理解redo/undo日志、MVCC、各种锁的细节,解决并发问题。
- SQL性能调优:掌握查询优化器原理,写出高性能SQL,提升数据库吞吐量。
- 面试竞争力:系统掌握MySQL核心知识点,从容应对数据库相关面试。
📖 书籍简介
- 出版社
《MySQL是怎样运行的:从根儿上理解 MySQL》采用诙谐幽默的表达方式,对MySQL的底层运行原理进行了介绍,内容涵盖了使用MySQL的同学在求职面试和工作中常见的一些核心概念。总计22 章,划分为4个部分。*1部分介绍了MySQL入门的一些知识,比如MySQL的服务器程序和客户端程序有哪些、MySQL的启动选项和系统变量,以及使用的字符集等。*2部分是本书后续章节的基础,介绍了MySQL的一些基础知识,比如记录、页面、索引、表空间的结构和用法等。3部分则与大家在工作中经常遇到的查询优化问题紧密相关,介绍了单表查询、连接查询的执行原理,MySQL基于成本和规则的优化具体指什么,并详细分析了Eplain语句的执行结果。4部分则是与MySQL中的事务和锁相关,介绍了事务概念的来源,MySQL是如何实现事务的,包括redo日志、undo日志、MVCC、各种锁的细节等。 尽管《MySQL是怎样运行的:从根儿上理解 MySQL》在写作时参考的MySQL源代码版本是5.7.22,但是大部分内容与具体的版本号并没有多大关系。无论是很早之前就已身居MySQL专家的人员,还是希望进一步提升技能的DBA,甚到是三五年后才会入行的“萌新”,本书都是他们彻底了解MySQL运行原理的*秀图书。


0章 楔子——阅读前必看 1
1章 装作自己是个小白——初识MySQL 3
1.1 MySQL的客户端/服务器架构 3
1.2 MySQL的安装 3
1.3 启动MySQL服务器程序 5
1.3.1 在类UNIX系统中启动服务器程序 5
1.3.2 在Windows系统中启动服务器程序 6
1.4 启动MySQL客户端程序 7
1.5 客户端与服务器连接的过程 10
1.5.1 TCP/IP 10
1.5.2 命名管道和共享内存 10
1.5.3 UNIX域套接字 11
1.6 服务器处理客户端请求 11
1.6.1 连接管理 12
1.6.2 解析与优化 12
1.6.3 存储引擎 14
1.7 常用存储引擎 14
1.8 关于存储引擎的一些作 16
1.8.1 查看当前服务器程序支持的存储引擎 16
1.8.2 设置表的存储引擎 16
1.9 总结 17
2章 MySQL的调控按钮——启动选项和系统变量 19
2.1 启动选项和配置文件 19
2.1.1 在命令行上使用选项 19
2.1.2 配置文件中使用选项 21
2.1.3 在命令行和配置文件中启动选项的区别 26
2.2 系统变量 27
2.2.1 系统变量简介 27
2.2.2 查看系统变量 27
2.2.3 设置系统变量 28
2.3 状态变量 32
2.4 总结 32
3章 字符集和比较规则 34
3.1 字符集和比较规则简介 34
3.1.1 字符集简介 34
3.1.2 比较规则简介 34
3.1.3 一些重要的字符集 35
3.2 MySQL中支持的字符集和比较规则 36
3.2.1 MySQL中的utf8和utf8mb4 36
3.2.2 字符集的查看 36
3.2.3 比较规则的查看 38
3.3 字符集和比较规则的应用 39
3.3.1 各级别的字符集和比较规则 39
3.3.2 客户端和服务器通信过程中使用的字符集 44
3.3.3 比较规则的应用 52
3.4 总结 53
4章 从一条记录说起——InDB记录存储结构 55
4.1 准备工作 55
4.2 InDB页简介 55
4.3 InDB行格式 56
4.3.1 指定行格式的语法 56
4.3.2 COMPACT行格式 56
4.3.3 REDUNDANT行格式 64
4.3.4 溢出列 68
4.3.5 DYNAMIC行格式和COMPRESSED行格式 70
4.4 总结 71
5章 盛放记录的大盒子——InDB数据页结构 72
5.1 不同类型的页简介 72
5.2 数据页结构快览 72
5.3 记录在页中的存储 73
5.4 Page Directory(页目录) 80
5.5 Page Header(页面头部) 85
5.6 File Header(文件头部) 86
5.7 File Trailer(文件尾部) 88
5.8 总结 88
6章 快速查询的秘籍——B+树索引 90
6.1 没有索引时进行查找 90
6.1.1 在一个页中查找 90
6.1.2 在很多页中查找 91
6.2 索引 91
6.2.1 一个简单的索引方案 92
6.2.2 InDB中的索引方案 94
6.2.3 InDB中B+树索引的注意事项 102
6.2.4 MyISAM中的索引方案简介 104
6.2.5 MySQL中创建和删除索引的语句 105
6.3 总结 106
7章 B+树索引的使用 107
7.1 B+树索引示意图的简化 107
7.2 索引的代价 109
7.3 应用B+树索引 110
7.3.1 扫描区间和边界条件 110
7.3.2 索引用于排序 122
7.3.3 索引用于分组 125
7.4 回表的代价 126
7.5 更好地创建和使用索引 127
7.5.1 只为用于搜索、排序或分组的列创建索引 127
7.5.2 考虑索引列中不重复值的个数 127
7.5.3 索引列的类型尽量小 127
7.5.4 为列前缀建立索引 128
7.5.5 覆盖索引 129
7.5.6 让索引列以列名的形式在搜索条件中单独出现 129
7.5.7 新插入记录时主键大小对效率的影响 129
7.5.8 冗余和重复索引 130
7.6 总结 131
8章 数据的家——MySQL的数据目录 132
8.1 数据库和文件系统的关系 132
8.2 MySQL数据目录 132
8.2.1 数据目录和安装目录的区别 132
8.2.2 如何确定MySQL中的数据目录 132
8.3 数据目录的结构 133
8.3.1 数据库在文件系统中的表示 133
8.3.2 表在文件系统中的表示 134
8.3.3 其他的文件 137
8.4 文件系统对数据库的影响 137
8.5 MySQL系统数据库简介 138
8.6 总结 138
9章 存放页面的大池子——InDB的表空间 140
9.1 回忆一些旧知识 140
9.1.1 页面类型 140
9.1.2 页面通用部分 141
9.2 独立表空间结构 142
9.2.1 区的概念 142
9.2.2 段的概念 144
9.2.3 区的分类 145
📑 章节目录