MySQL 是怎样运行的:从根儿上理解 MySQL

龙哥4个月前IT145

小册介绍

MySQL凭借着它还不错的性能、还不错的稳定性常年稳居老二宝座,当然最大的优势就是它不要钱,还开源,这让它成为大部分中小型公司,尤其是互联网公司首选的数据库(近年来,越来越多的大公司也在尝试将业务转移到这种不要钱的数据库上来)。

越来越多的DBA和后端同学在工作中少不了和MySQL打交道,也经常会产生这样的疑问:

  • 为什么这个SQL执行的这么慢?

  • 为什么明明我建了索引但查询计划显示没用?

  • 为什么我的IN查询里的参数一多就不使用索引了?

  • 为什么突然我的数据就成了乱码?

  • 到底应不应该使用连接查询?

  • 吧啦吧啦一大堆……

在面试中MySQL的一些知识更成为躲不过的问题,比如索引结构、MVCC、隔离级别的实现、锁的使用等等都成为了面试考题重灾区。

其实对于工程技术人员来说,大部分接触的所谓技术是没那么需要智商的,只是需要讲解这些技术的同学稍微切换一个角度,切换到小白的角度而不是站在一个上帝视角去讲述问题,那些看起来非常高深复杂的问题其实都是为了一个非常简单的初衷而不得不采用的设计。我的任务就是带着大家从非常简单的问题出发,在解决问题的路上我们会遇到一些麻烦,由这些麻烦我们会很自然的引入一些新的概念,我会不断地向大家强化这些新概念,当我确保大家已经完全掌握了这些新概念后,会基于这些新概念再引入一些更为复杂的问题。高楼大厦虽然雄伟,解构之后不过是钢筋水泥。当然这个过程我会适当给大家加点儿料、扯扯犊子,让大家像读小说一样接受这些MySQL的核心概念。

小册的套路

我们相信,只要向大家有节奏地展示足够多的技术细节,那么整个学习过程将会变得流畅平滑,MySQL的面纱也会慢慢的被摘下。所以我们在后续介绍MySQL运行过程中需要用到的各种结构时会尽力向大家解释清楚每个字节都是干嘛用的,某几部分组合起来会有什么样的效果等等。

对于一些比较复杂的概念时,我不准备使用概念先行的方式进行讲解,也就是先给大家提出一个概念,然后介绍这个概念有什么什么属性,每个属性又有什么特点,每个特点又有什么用法。在解释比较复杂的问题时,我会按照下面的套路出发:

  • 我们遇到了什么问题

  • 为了解决问题提出了什么概念

  • 这个概念在MySQL中又有哪些需要注意的地方。

也就是:不先讲是什么,先讲为什么。

覆盖的内容

本小册致力于覆盖大家工作和面试过程中最常遇到的MySQL的一些核心概念,共划分为4个部分,各部分简介如下:

部分简介描述
第一部分入门以只会写增删改查语句的小白身份重新审视一下MySQL到底是个什么东东,会介绍MySQL的服务器程序和客户端程序有哪些,包括启动选项和系统变量以及字符集的一些事情。
第二部分基础结构相关唠叨记录、页面、索引、表空间的结构和用法,是全篇的基础,后边的章节都依赖于这些结构。
第三部分查询优化相关介绍同学们工作中经常遇到的查询优化问题,介绍单表查询是如何执行的,连接查询是怎么执行的,MySQL基于成本和规则的优化是个什么东西,以及会十分详细地介绍查看Explain语句执行结果的办法。
第四部分事务和锁相关介绍为什么会有事务的概念,以及MySQL是如何实现事务的,包括redo日志、undo日志、MVCC、各种锁的细节等~

全是图

有时候使用语言表述一个东西太抽象,一图胜千言,所以我们在各种可能让大家迷糊的地方画了各种对应的图示,整个小册用到的图片有上百张之多(其实我背地里画了 200 多张图片),象征性地贴几张:

  • Compact行格式示意图:

  • InnoDB数据页结构示意图:

  • B+树索引结构示意图:

  • 表空间结构示意图:

    image_1d47f9kdl1rjmeg21ejm1e8m19ep.png-105.3kB

  • 单表查询中根据二级索引访问的示意图:

    image_1d47fb5fh656nmg1qkl1qk8vb616.png-131.5kB

  • Buffer Poolfree链表示意图:

    image_1d47fgsite68eeikur1ug13vd1j.png-229.5kB

  • 。。。。。

另外

当然,MySQL是一个很大的主题,我这里只能尽量用通俗的语言让大家理解许多重要的概念或者模型,要是事无巨细的都写出来应该能写好几千页,Baron Schwartz之前写了个关于InnoDB存储引擎的一个提纲:An Outline for a Book on InnoDB,他列了提纲之后貌似就再没写书的动静了,可能是内容太多了吧,这本书一直没见着问世,不过大家可以通过这个提纲一窥全貌。

作者介绍

小孩子:前在线教育公司「跟谁学」后端工程师,公众号「我们都是小青蛙」作者,喜欢研究源码,觉得把复杂的问题讲清楚是一件很牛逼的事儿。

你会学到什么?

  • MySQL 的一些基本概念;

  • 如何处理使用 MySQL 过程中的乱码问题;

  • 从根儿上理解 InnoDB 存储引擎是如何存储记录、数据页,以及由页作为节点组成的B+树索引的原理;

  • 理解 InnoDB 存储引擎的表空间概念,知道 InnoDB 是如何管理段、区、页这些玩意儿以及 InnoDB 的数据字典;

  • 理解 MySQL 是如何执行单表查询、如何执行连接查询;

  • 理解 MySQL 基于代价的优化和基于规则的优化到底是啥意思;

  • 知道如何查看自己写的查询语句是好是坏,学会使用optimizer tracer;

  • 理解为什么需要事务以及它的基本概念;

  • redo 和 undo 日志的作用以及在 MySQL 中这些日志的细节;

  • 理解并发带来的各种问题以及 MySQL 中使用锁的各种细节;

  • 理解学习的快乐,希望各位看完本小册就像是读完一本小说一样畅快淋漓。

适宜人群

  • 刚刚学完 SQL 基础的学生同学们;

  • 被数据库问题折磨的求职者们;

  • 天天被 DBA 逼着优化 SQL 的业务开发小伙伴;

  • 菜鸟 DBA 和不是非常菜的 DBA 小伙伴;

  • 对 MySQL 内核有强烈兴趣但看源码一脸懵逼的小伙伴。

名人推荐

购买须知

  • 本小册为图文形式内容服务,共计 25 节;

  • 文章已全部更新完毕;

  • 购买用户可享有小册永久的阅读权限;

  • 购买用户可使用掘金 Web 端和掘金App进行阅读;

  • 购买用户可进入小册微信群与作者互动;

  • 掘金小册为虚拟内容服务,一经购买成功概不退款;

  • 掘金小册版权归北京北比信息技术有限公司所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或- 以其他方式复制发布/发表,违者将依法追究责任;

  • 在掘金小册阅读过程中,如有任何问题,请邮件联系 xiaoce@xitu.io


购买地址

https://s.juejin.cn/ds/jSqkp5a/


作者:龙哥leon
链接:http://anool.net
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 如果觉得文章对你有帮助,可以请我喝杯咖啡

相关文章

程序员职业小白书 —— 如何规划和经营你的职业

程序员职业小白书 —— 如何规划和经营你的职业

小册简介关于作者大家好,我是@Easy,写了十多年程序,架设过每天数亿访问量的云平台;帮上千名程序员找过工作(创业项目是人才拍卖服务),也在用户数超过一千五百万的技术门户做过VP。由于工作和兴趣的原因...

Git 原理详解及实用指南

Git 原理详解及实用指南

作者介绍我是扔物线,Android GDE(谷歌开发者专家),Android 高级技术分享网站 HenCoder 作者,Kotlin 上手教学项目码上开学创始人,前 Flipboard 工程师,开源贡...

作者简介(2100x389).jpg

MySQL 性能调优必知必会

作者介绍小阳爱技术,资深开发工程师,数据库管理员 && 容器云狂热分子。从事运维开发 5 年,其中在工作中主要负责维护数据库和容器云平台。精通 MySQL 高可用集群架构和 Kuber...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。