保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

打开黑盒从MySQL架构设计出发,看它是如何执行一条SQL语

  特别说明:本文来自公众号狸猫技术窝的专栏《从零开始带你成为MySQL实战优化高手》,是作者救火队队长开放的试读文章
  1、把MySQL当个黑盒子一样执行SQL语句
  上一讲我们已经说到,我们的系统采用数据库连接池的方式去并发访问数据库,然后数据库自己其实也会维护一个连接池,其中管理了各种系统跟这台数据库服务器建立的所有连接
  我们先看下图回顾一下
  当我们的系统只要能从数据库连接池获取到一个数据库连接之后,我们就可以执行增删改查的SQL语句了
  从上图其实我们就可以看到,我们可以通过数据库连接把要执行的SQL语句发送给MySQL数据库。
  然后呢?大部分同学了解到这个程度就停下来了,然后大家觉得要关注的可能主要就是数据库里的表结构,建了哪些索引,然后就按照SQL语法去编写增删改查SQL语句,把MySQL当个黑盒子去执行SQL语句就可以了。
  我们只知道执行了insert语句之后,在表里会多出来一条数据;执行了update语句之后,会对表里的数据进行更改;执行了delete语句之后,会把表里的一条数据删除掉;执行了select语句之后,会从表里查询一些数据出来。
  如果语句性能有点差?没关系,在表里建几个索引就可以了!可能这就是目前行业内很多工程师对数据库的一个认知,完全当他是个黑盒子,来建表以及执行SQL语句。
  但是大家既然跟着我开始学习了,从现在开始就要打破这种把数据库当黑盒子的认知程度,要深入底层,去探索数据库的工作原理以及生产问题的优化手段!
  2、一个不变的原则:网络连接必须让线程来处理
  现在假设我们的数据库服务器的连接池中的某个连接接收到了网络请求,假设就是一条SQL语句,那么大家先思考一个问题,谁负责从这个连接中去监听网络请求?谁负责从网络连接里把请求数据读取出来?
  我想很多人恐怕都没思考过这个问题,但是如果大家对计算机基础知识有一个简单了解的话,应该或多或少知道一点,那就是网络连接必须得分配给一个线程去进行处理,由一个线程来监听请求以及读取请求数据,比如从网络连接中读取和解析出来一条我们的系统发送过去的SQL语句,如下图所示:
  3、SQL接口:负责处理接收到的SQL语句
  接着我们来思考一下,当MySQL内部的工作线程从一个网络连接中读取出来一个SQL语句之后,此时会如何来执行这个SQL语句呢?
  其实SQL是一项伟大的发明,他发明了简单易用的数据读写的语法和模型,哪怕是个产品经理,或者是运营专员,甚至是销售专员,即使他不会技术,他也能轻松学会使用SQL语句。
  但如果你要去执行这个SQL语句,去完成底层数据的增删改查,那这就是一项极度复杂的任务了!
  所以MySQL内部首先提供了一个组件,就是SQL接口(SQLInterface),他是一套执行SQL语句的接口,专门用于执行我们发送给MySQL的那些增删改查的SQL语句
  因此MySQL的工作线程接收到SQL语句之后,就会转交给SQL接口去执行,如下图。
  4、查询解析器:让MySQL能看懂SQL语句
  接着下一个问题来了,SQL接口怎么执行SQL语句呢?你直接把SQL语句交给MySQL,他能看懂和理解这些SQL语句吗?
  比如我们来举一个例子,现在我们有这么一个SQL语句:
  selectid,name,agefromuserswhereid1
  这个SQL语句,我们用人脑是直接就可以处理一下,只要懂SQL语法的人,立马大家就知道他是什么意思,但是MySQL自己本身也是一个系统,是一个数据库管理系统,他没法直接理解这些SQL语句!
  所以此时有一个关键的组件要出场了,那就是查询解析器
  这个查询解析器(Parser)就是负责对SQL语句进行解析的,比如对上面那个SQL语句进行一下拆解,拆解成以下几个部分:
  我们现在要从users表里查询数据
  查询id字段的值等于1的那行数据
  对查出来的那行数据要提取里面的id,name,age三个字段。
  所谓的SQL解析,就是按照既定的SQL语法,对我们按照SQL语法规则编写的SQL语句进行解析,然后理解这个SQL语句要干什么事情,如下图所示:
  5、查询优化器:选择最优的查询路径
  当我们通过解析器理解了SQL语句要干什么之后,接着会找查询优化器(Optimizer)来选择一个最优的查询路径。
  可能有同学这里就不太理解什么是最优的查询路径了,这个看起来确实很抽象,当然,这个查询优化器的工作原理,后续将会是我们分析的重点,大家现在不用去纠结他的原理。
  但是我们可以用一个极为通俗简单的例子,让大家理解一下所谓的最优查询路径是什么。
  就用我们刚才讲的那个例子好了,我们现在理解了一个SQL想要干这么一个事儿:我们现在要从users表里查询数据,查询id字段的值等于1的那行数据,对查出来的那行数据要提取里面的id,name,age三个字段。
  事是明白了,但是到底应该怎么来实现呢?
  你看,要完成这个事儿我们有以下几个查询路径(纯属用于大家理解的例子,不代表真实的MySQL原理,但是通过这个例子,大家肯定能理解所谓最优查询路径的意思):
  直接定位到users表中的id字段等于1的一行数据,然后查出来那行数据的id,name,age三个字段的值就可以了
  先把users表中的每一行数据的id,name,age三个字段的值都查出来,然后从这批数据里过滤出来id字段等于1的那行数据的id,name,age三个字段
  上面这就是一个最简单的SQL语句的两种实现路径,其实我们会发现,要完成这个SQL语句的目标,两个路径都可以做到,但是哪一种更好呢?显然感觉上是第一种查询路径更好一些。
  所以查询优化器大概就是干这个的,他会针对你编写的几十行、几百行甚至上千行的复杂SQL语句生成查询路径树,然后从里面选择一条最优的查询路径出来。
  相当于他会告诉你,你应该按照一个什么样的步骤和顺序,去执行哪些操作,然后一步一步的把SQL语句就给完成了。
  我们来一起看看下面的图:
  6、调用存储引擎接口,真正执行SQL语句
  最后一步,就是把查询优化器选择的最优查询路径,也就是你到底应该按照一个什么样的顺序和步骤去执行这个SQL语句的计划,把这个计划交给底层的存储引擎去真正的执行。
  这个存储引擎是MySQL的架构设计中很有特色的一个环节。
  不知道大家是否思考过,真正在执行SQL语句的时候,要不然是更新数据,要不然是查询数据,那么数据你觉得存放在哪里?
  说白了,数据库也不是什么神秘莫测的东西,你可以把他理解为本身就是一个类似你平时写的图书馆管理系统、电信计费系统、电商订单系统之类的系统罢了。
  数据库自己就是一个编程语言写出来的系统而已,然后启动之后也是一个进程,执行他里面的各种代码,也就是我们上面所说的那些东西。所以对数据库而言,我们的数据要不然是放在内存里,要不然是放在磁盘文件里,没什么特殊的地方!
  所以我们来思考一下,假设我们的数据有的存放在内存里,有的存放在磁盘文件里,如下图所示。
  那么现在问题来了,我们已经知道一个SQL语句要如何执行了,但是我们现在怎么知道哪些数据在内存里?哪些数据在磁盘里?我们执行的时候是更新内存的数据?还是更新磁盘的数据?我们如果更新磁盘的数据,是先查询哪个磁盘文件,再更新哪个磁盘文件?
  是不是感觉一头雾水
  所以这个时候就需要存储引擎了,存储引擎其实就是执行SQL语句的,他会按照一定的步骤去查询内存缓存数据,更新磁盘数据,查询磁盘数据,等等,执行诸如此类的一系列的操作,如下图所示。
  MySQL的架构设计中,SQL接口、SQL解析器、查询优化器其实都是通用的,他就是一套组件而已。
  但是存储引擎的话,他是支持各种各样的存储引擎的,比如我们常见的InnoDB、MyISAM、Memory等等,我们是可以选择使用哪种存储引擎来负责具体的SQL语句执行的。
  当然现在MySQL一般都是使用InnoDB存储引擎的,至于存储引擎的原理,后续我们也会深入一步一步分析,大家不必着急。
  7、执行器:根据执行计划调用存储引擎的接口
  那么看完存储引擎之后,我们回过头来思考一个问题,存储引擎可以帮助我们去访问内存以及磁盘上的数据,那么是谁来调用存储引擎的接口呢?
  其实我们现在还漏了一个执行器的概念,这个执行器会根据优化器选择的执行方案,去调用存储引擎的接口按照一定的顺序和步骤,就把SQL语句的逻辑给执行了。
  举个例子,比如执行器可能会先调用存储引擎的一个接口,去获取users表中的第一行数据,然后判断一下这个数据的id字段的值是否等于我们期望的一个值,如果不是的话,那就继续调用存储引擎的接口,去获取users表的下一行数据。
  就是基于上述的思路,执行器就会去根据我们的优化器生成的一套执行计划,然后不停的调用存储引擎的各种接口去完成SQL语句的执行计划,大致就是不停的更新或者提取一些数据出来
  我们看下图的示意
  8、思考题:打开脑洞,你觉得不同的存储引擎是用来干什么的?
  今天给大家留一个小的思考题,就是你先别管MySQL有哪些存储引擎,你就从业务场景来出发考虑,有的场景可能是高并发的更新,有的场景可能是大规模数据查询,有的场景可能是允许丢失数据的
  那么你觉得如果让你来设计存储引擎,你觉得应该有哪些存储引擎,分别适用于什么场景?
  希望大家在评论区留言,踊跃思考和回复。
  END
  作者:救火队队长,阿里资深技术专家
  来源:公众号狸猫技术窝专栏《从零开始带你成为MySQL实战优化高手》
  如有收获,请划至底部,点击在看,谢谢!
  QQ群二维码如下,添加请注明:地区职位,否则不予通过

新购电脑系统释放硬盘分区桌面设置应用软件安装教程新购电脑一般会预装正版家庭版操作系统,但系统没有释放;硬盘一般只有一个分区(固态机械至少两个分区),需要按硬盘大小分多个区;电脑桌面为原始状态,需要常规设置;应用软件没有安装,……难忘的一件事人生,就像是独自走进一片蓊郁幽静的森林,枝叶繁茂,小径交错,每一个岔路都是一场只能前进而不能后退的冒险,如同一场豪赌,无论成败,只能自己承担,每个人都不例外,一旦做出了选择,就……透明的玻璃瓶小学生作文我从小就喜欢玻璃做的东西,它们都透明得没有一丝浊物,是上帝制作出来的精灵,因此,连太阳也喜爱玻璃,总是用自己的光来使玻璃折射出七彩的光。我拥有的最多玻璃制品就是玻璃瓶了。……感谢妈妈品学网专稿未经允许不得转载在我出生前,我问上帝:ldquo;我到了人间会有人保护我吗?rdquo;上帝说:ldquo;有,会有一位天使保护你,呵护你的。rdquo;……咱们也有了绿巨人渝东南地区首开复兴号动车组侧记咱们也有了‘绿巨人’渝东南地区首开复兴号动车组侧记本报记者付世坤通讯员唐友权李文航7月25日12时25分,渝怀铁路秀山火车站首次迎来由重庆北开来的C5831次……父与子读后感《父与子》这本书讲的是长着刺猬头、调皮、可爱、喜欢搞恶作剧的儿子。长着大胡子、和蔼、善良、又经常被人嘲笑的父亲,他们演出了一场场生动又好玩的画面,看后使我们哈哈大笑,回味无穷。……轨温70度,他们在上面打火花内江工务段抗高温保安全侧记轨温70度,他们在上面打火花内江工务段抗高温、保安全侧记近段时间,内江气温居高不下,在灼热的太阳下,草木奄奄一息,大地更是晒得滚烫。但却有这么一群人,他们顶着烈日,……生于忧患死于安乐800字作文强弓劲弩,信臣精卒,据亿丈之城,临不测之渊。却不想在万千文人的惨叫声中,宫女嫔妃的歌舞声中,王公大臣的奉承声中,天下百姓的怨恨声中土崩瓦解。秦国,一个不可一世灭了六国,一个自诩……写妈妈的信母亲,是世界上最伟大的职业,对于母亲你有什么话想说的呢,下面为大家分享几篇作文写妈妈的信,欢迎阅读写妈妈的信亲爱的妈妈:您好!妈妈,我想对您说我爱您,更爱这个……描写雨的词语汇总春天来了,我们又将迎来一个下雨的春季。下面是小编为你带来的描写雨的词语汇总,希望对你有帮助。描写小雨的词语:细雨绵绵淅淅沥沥春雨绵绵春雨如丝和风细雨描写暴雨的词语:……神奇的探险之旅优秀作文400字你喜欢探险吗?你读过有关探险的书吗?这次习作就让我们编一个惊险刺激的探险故事吧?下面是小编收集整理的神奇的探险之旅优秀作文400字,欢迎阅读参考!神奇的探险之旅优秀作文400字……描写家风家训作文600字很多名人都有家风家训,我们家不是名人家庭,小编收集了家风家训的作文,欢迎阅读。第一篇:家风家训每个家庭都有自己的家风和家训。家风对每个人都有着潜移默化而重要的影响,它就像……
我快乐,我成长的500字作文今天是星期四,也是一个特殊的日子,那就是学校里一年一度的运动会。我来到学校,学校里热热闹闹的,我想我们班的同学一定在教室里热烈的谈论着今天的比赛,于是,我连忙跑到教室,东……妈妈再爱我一次吧如果你喜欢我的文章,请关注微信公众号:南小南杂谈。亲情不分国界,不分种群,那种爱是相伴一生的。今天刷视频时看到一件辛酸的事。鲸鱼妈妈离世,鲸鱼宝宝无法接受这个残酷的……我曾经尝得,失望无论大小,是一种苦味1:要相信你的好运气正朝你飞奔而来。你可以一路小跑着去迎接它,也可以慢步走着或在原地等着,但你不能背过身去或找个地方躲着它呀。2:风可以吹起一大张白纸,却无法吹走一只蝴蝶……我给你的温柔,从来没给过任何人1:没必要不断地主动和你说话,反正我对你的喜欢就这么多,你用冷淡磨合完了,也就不会再有了。2:既想放弃你,又想纠缠你,不想联系你,却又想联系,既想退出你的世界,又害怕失去……你感觉是错过,人家感觉是解脱1:所有人都在掩饰,在试探,在权衡利弊,可我偏不,我要热烈,要坦诚,要以真心硬碰硬。2:他说:不能给其他男孩子联系方式,不准和其他男孩子走得太近,不然他再温柔都会拎着酒瓶……故事的开头总是极尽温柔,那只是开头1:你可以不在乎我的感受不在乎我对你的热情,甚至可以不理会我的沮丧和难过,但是每个人的付出都是有限的,我能做到问心无愧,但我也许做不到步步想让,我拼命的纠缠不是赌你会回头,而是……情绪总会突然涌上来,每次都措不及防1:我总是在想,你失去我会不会难过,会不会后悔,但是我现在明白,自始至终都是我沉浸在爱里,是我自己不放过自己。2:时间扑面而来,我们终将释怀。健康地活着,平静地过着,开心……50岁阿姨在棋牌室的爱恨交加熟人好下手近日,发生了这样一件事,丈夫外地打工,50岁的妻子每天去棋牌室打牌,每天玩到凌晨,如果输钱了也不会考虑欠债还钱,而是选择肉偿的方式偿还自己的债务,阿姨每天棋牌室散场后,都会喝酒……是什么样的爱,让二婚的她不顾生命,为小9岁的丈夫生子一个二婚的大龄妇女为小自己九岁的丈夫生子,本身为高龄产妇的她不惜冒着生命危险结婚生子,而且丈夫还比自己小九岁,丈夫是家里的独生子也是头婚,。对于这个还没有结婚经历的男人,究竟是……高中国庆节日记又一个国庆节到了,我们学校也放了假,我的爸爸妈妈也可以休息七天。这七天的假期小朋友们打算怎么过呢?是去外地旅游,还是在家里看电视、玩电脑?是整天陶醉在书林之中,还是在家帮父母干……新婚妻子突然查出癌症,丈夫非但不管,还劝其打掉7个月的宝宝人的一生中可能会遭遇很多的坎坎坷坷,甚至是艰难险阻,但这些有时候,就是生命中难以规避的这些经历,带给一个人人生往往是更多的成长和历练。对女性而言,人生路上的挫折总会让自己成长,……女人迷恋一个男人,其实原因很简单当你真的在乎一个人之时,多么微不足道的小细节,也变得重要起来。因为爱,所以在乎;因为重要,所以爱。而令你产生爱上一个人的理由,却相当独特,至少在当事人的内心当中,对方很完……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网