小孩子 著
12 小时 . 25 小节
从根儿上理解 MySQL, 让 MySQL 不再是一个黑盒
小册内容
小册介绍
MySQL 凭借着它还不错的性能, 还不错的稳定性常年稳居老二宝座, 当然最大的优势就是它不要钱, 还开源, 这让它成为大部分中小型公司, 尤其是互联网公司首选的数据库 (近年来越来越多的大公司也在尝试将业务转移到这种不要钱的数据库上来).
越来越多的 DBA 和后端同学在工作中少不了和 MySQL 打交道, 为什么这个 SQL 执行的这么慢? 为什么明明我建了索引但查询计划显示没用? 为什么我的 IN 查询里的参数一多就不使用索引了? 为什么突然我的数据就成了乱码? 到底应不应该使用连接查询? 吧啦吧啦一大堆. 在面试中 MySQL 的一些知识更成为躲不过的问题, 比如索引结构, MVCC, 隔离级别的实现, 锁的使用等等等等都成为了面试考题重灾区.
其实对于工程技术人员来说, 大部分接触的所谓技术是没那么需要智商的, 只是需要讲解这些技术的同学稍微切换一个角度, 切换到小白的角度而不是站在一个上帝视角去讲述问题, 那些看起来非常高深复杂的问题其实都是为了一个非常简单的初衷而不得不采用的设计. 我的任务就是带着大家从非常简单的问题出发, 在解决问题的路上我们会遇到一些麻烦, 由这些麻烦我们会很自然的引入一些新的概念, 我会不断的向大家强化这些新概念, 当我确保大家已经完全掌握了这些新概念后, 会基于这些新概念再引入一些更为复杂的问题. 高楼大厦虽然雄伟, 解构之后不过是钢筋水泥. 当然这个过程我会适当的给大家加点儿料, 扯扯犊子, 让大家像读小说一样接受这些 MySQL 的核心概念.
小册的套路
我们相信, 只要向大家有节奏的展示足够多的技术细节, 那么整个学习过程将会变得流畅平滑, MySQL 的面纱也会慢慢的被摘下. 所以我们在后续介绍 MySQL 运行过程中需要用到的各种结构时会尽力向大家解释清楚每个字节都是干嘛用的, 某几部分组合起来会有什么样的效果等等.
对于一些比较复杂的概念时, 我们不准备使用概念先行方式进行讲解, 也就是先给大家提出一个概念, 然后介绍这个概念有什么什么属性, 每个属性又有什么什么特点, 每个特点又有什么什么的用法. 我们在解释比较复杂的问题时会按照下边的套路出发:
我们遇到了什么问题;
为了解决问题提出了什么概念;
这个概念在 MySQL 中又有哪些需要注意的地方.
也就是: 不先讲是什么, 先讲为什么.
覆盖的内容
本小册致力于覆盖大家工作和面试过程中最常遇到的 MySQL 的一些核心概念, 共划分为 4 个部分, 各部分简介如下:
有时候使用语言表述一个东西太抽象, 一图胜千言, 所以我们在各种可能让大家迷糊的地方画了各种对应的图示, 整个小册用到的图片有上百张之多 (其实我背地里画了 200 多张图片), 象征性的贴几张:
全是图
Compact 行格式示意图:
表空间结构示意图:
单表查询中根据二级索引访问的示意图:
来源: https://www.qcloud.com/developer/article/1404354