![]()
内容推荐 本书采用诙谐幽默的表达方式,对MySQL的底层运行原理进行了介绍,内容涵盖了使用MySQL的同学在求职面试和工作中常见的一些核心概念。 本书总计22章,划分为4个部分。第1部分介绍了MySQL入门的一些知识,比如MySQL的服务器程序和客户端程序有哪些、MySQL的启动选项和系统变量,以及使用的字符集等。第2部分是本书后续章节的基础,介绍了MySQL的一些基础知识,比如记录、页面、索引、表空间的结构和用法等。第3部分则与大家在工作中经常遇到的查询优化问题紧密相关,介绍了单表查询、连接查询的执行原理,MySQL基于成本和规则的优化具体指什么,并详细分析了EXPLAIN语句的执行结果。第4部分则是与MySQL中的事务和锁相关,介绍了事务概念的来源,MySQL是如何实现事务的,包括redo日志、undo日志、MVCC、各种锁的细节等。 尽管本书在写作时参考的MySQL源代码版本是5.7.22,但是大部分内容与具体的版本号并没有多大关系。无论是很早之前就已身居MySQL专家的人员,还是希望进一步提升技能的DBA,甚至是三五年后才会入行的“萌新”,本书都是他们彻底了解MySQL运行原理的优秀图书。 目录 第0章 楔子——阅读前必看 第 1章 装作自己是个小白——初识MySQL 1.1 MySQL的客户端/服务器架构 1.2 MySQL的安装 1.3 启动MySQL服务器程序 1.3.1 在类UNIX系统中启动服务器程序 1.3.2 在Windows系统中启动服务器程序 1.4 启动MySQL客户端程序 1.5 客户端与服务器连接的过程 1.5.1 TCP/IP 1.5.2 命名管道和共享内存 1.5.3 UNIX域套接字 1.6 服务器处理客户端请求 1.6.1 连接管理 1.6.2 解析与优化 1.6.3 存储引擎 1.7 常用存储引擎 1.8 关于存储引擎的一些操作 1.8.1 查看当前服务器程序支持的存储引擎 1.8.2 设置表的存储引擎 1.9 总结 第 2章 MySQL的调控按钮——启动选项和系统变量 2.1 启动选项和配置文件 2.1.1 在命令行上使用选项 2.1.2 配置文件中使用选项 2.1.3 在命令行和配置文件中启动选项的区别 2.2 系统变量 2.2.1 系统变量简介 2.2.2 查看系统变量 2.2.3 设置系统变量 2.3 状态变量 2.4 总结 第3章 字符集和比较规则 3.1 字符集和比较规则简介 3.1.1 字符集简介 3.1.2 比较规则简介 3.1.3 一些重要的字符集 3.2 MySQL中支持的字符集和比较规则 3.2.1 MySQL中的utf8和utf8mb4 3.2.2 字符集的查看 3.2.3 比较规则的查看 3.3 字符集和比较规则的应用 3.3.1 各级别的字符集和比较规则 3.3.2 客户端和服务器通信过程中使用的字符集 3.3.3 比较规则的应用 3.4 总结 第4章 从一条记录说起——InnoDB记录存储结构 4.1 准备工作 4.2 InnoDB页简介 4.3 InnoDB行格式 4.3.1 指定行格式的语法 4.3.2 COMPACT行格式 4.3.3 REDUNDANT行格式 4.3.4 溢出列 4.3.5 DYNAMIC行格式和COMPRESSED行格式 4.4 总结 第5章 盛放记录的大盒子——InnoDB数据页结构 5.1 不同类型的页简介 5.2 数据页结构快览 5.3 记录在页中的存储 5.4 Page Directory(页目录) 5.5 Page Header(页面头部) 5.6 File Header(文件头部) 5.7 File Trailer(文件尾部) 5.8 总结 第6章 快速查询的秘籍——B+树索引 6.1 没有索引时进行查找 6.1.1 在一个页中查找 6.1.2 在很多页中查找 6.2 索引 6.2.1 一个简单的索引方案 6.2.2 InnoDB中的索引方案 6.2.3 InnoDB中B+树索引的注意事项 6.2.4 MyISAM中的索引方案简介 6.2.5 MySQL中创建和删除索引的语句 6.3 总结 第7章 B+树索引的使用 7.1 B+树索引示意图的简化 7.2 索引的代价 7.3 应用B+树索引 7.3.1 扫描区间和边界条件 7.3.2 索引用于排序 7.3.3 索引用于分组 7.4 回表的代价 7.5 更好地创建和使用索引 7.5.1 只为用于搜索、排序或分组的列创建索引 7.5.2 考虑索引列中不重复值的个数 7.5.3 索引列的类型尽量小 7.5.4 为列前缀建立索引 7.5.5 覆盖索引 7.5.6 让索引列以列名的形式在搜索条件中单独出现 7.5.7 新插入记录时主键大小对效率的影响 7.5.8 冗余和重复索引 7.6 总结 第8章 数据的家——MySQL的数据目录 8.1 数据库和文件系统的关系 8.2 MySQL数据目录 8.2.1 数据目录和安装目录的区别 8.2.2 如何确定MySQL中的数据目录 8.3 数据目录的结构 8.3.1 数据库在文件系统中的表示 8.3.2 表在文件系统中的表示 8.3.3 其他的文件 8.4 文件系统对数据库的影响 8.5 MySQL系统数据库简介 8.6 总结 第9章 存放页面的大池子——InnoDB的表空间 9.1 回忆一些旧知识 9.1.1 页面类型 9.1.2 页面通用部分 9.2 独立表空间结构 9.2.1 区的概念 9.2.2 段的概念 9.2.3 区的分类 9.2.4 段的结构 9.2.5 各类型页面详细情况 9.2.6 Segment Header结构的运用 9.2.7 真实表空间对应的文件大小 9.3 系统表空间 9.4 总结 第 10章 条条大路通罗马——单表访问方法 10.1 访问方法的概念 10.2 const 10.3 ref 10.4 ref_or_null 10.5 range 10.6 index 10.7 all 10.8 注意事项 10.8.1 重温二级索引+回表 10.8.2 索引合并 10.9 总结 第 11章 两个表的亲密接触——连接的原理 11.1 连接简介 11.1.1 连接的本质 11.1.2 连接过程简介 11.1.3 内连接和外连接 11.2 连接的原理 11.2.1 嵌套循环连接 11.2.2 使用索引加快连接速度 11.2.3 基于块的嵌套循环连接 11.3 总结 第 12章 谁最便宜就选谁——基于成本的优化 12.1 什么是成本 12.2 单表查询的成本 12.2.1 |