56星座屋
当前位置: 首页 星座百科

mysql查看执行sql语句(一条查询或更新SQL语句)

时间:2023-05-23 作者: 小编 阅读量: 4 栏目名: 星座百科

现在最常用的存储引擎是InnoDB,自MySQL5.5.5版本后,InnoDB成为了默认的存储引擎。所有的SQL操作都将使用连接器,主要负责用户登录数据库时,进行用户的身份认证,包括校验用户的账户、密码、权限等操作。同时,当SQL执行完成后,执行结果会被存入查询缓存中。在MySQL8.0版本中,直接将查询缓存的整块功能删掉了。第二步,语法分析,判断输入的SQL是否正确,是否符合MySQL的语法。

本篇文章将介绍一条SQL语句在 Mysql中是如何执行的,包括MySQL的查询、更新操作。若想要了解MySQL中SQL语句中各关键字的执行顺序,可通过跳转文末文章链接进行阅读。

从上图中可知,MySQL内部大致分为服务层和存储引擎层两部分:

  • 服务层:包含连接器、查询缓存、分析器、优化器、执行器等。涵盖MySQL的大多数核心服务功能及所有的内置函数(如日期、时间、数学和加密函数等)。所有跨存储引擎的功能都将在这一层实现,比如存储过程、触发器、视图,函数等,也包括通用的binglog日志模块。
  • 存储引擎层:包含数据的存储和提取。采用可以替换的插件式架构,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,自MySQL 5.5.5版本后,InnoDB成为了默认的存储引擎。

接下来,我们了解一下连接器、查询缓存、分析器、优化器、执行器。

所有的SQL操作都将使用连接器,主要负责用户登录数据库时,进行用户的身份认证,包括校验用户的账户、密码、权限等操作。

其中,验证用户名和密码的过程如下:

  1. 若密码错误,则收到"Access denied for user"的错误,然后客户端程序结束执行。
  2. 若账户、密码都正确,连接器会到权限表里面查出用户拥有的权限。在此之后,整个连接里面的权限判断逻辑,都将依赖于此时查询到的权限。

需要注意的是:当管理员对一个正在连接的用户的权限进行修改,并不会影响该用户的权限。只有当修改完成后,用户重新创建的连接时,才会使用新的权限。


连接建立成功后,MySQL会先查询缓存,先校验该查询SQL是否执行过,如果之前执行过的语句,那么该语句的历史查询结果以 Key-Value对的形式缓存在内存中,Key为查询语句,Value为查询结果。如果缓存中Key被命中,就会直接返回Value给客户端,如果没有命中,就会执行后续的操作。同时,当SQL执行完成后,执行结果会被存入查询缓存中。

在获取执行缓存查询结果时,同样需要校验用户的权限。

需要注意的是:在Mysql中进行查询时并不建议使用缓存,因为对于经常更新的数据来说,每次更新表其相关的全部查询缓存都会失效,因此缓存的有效时间很短,查询缓存的命中率会非常低。但对于不经常更新的数据来说,使用缓存还是可以的。在MySQL 8.0 版本中,直接将查询缓存的整块功能删掉了。


若Mysql 没有命中缓存,那么就会进入分析器,分析器将对执行的SQL进行词法分析与语法分析,主要分为如下两个步骤:

  • 第一步,词法分析,一条SQL语句由多个字符串组成,词法分析将提取关键字(比如SELECT,WHERE)、表名、字段名、查询条件等。
  • 第二步,语法分析,判断输入的SQL是否正确,是否符合MySQL的语法。

需要注意的是:判断查询的字段在表中是否存在,也是在分析器这里进行。


经过分析器后,MySQL得知 SQL是做什么操作的,优化器的作用就是确定它认为的最优的执行方案(有时候实际并不是最优,仅仅是它认为最优),如,当一个表存在多个索引的时,决定使用哪个索引,或者一个语句存在多表关联(JOIN)时,决定各个表的连接顺序。

需要注意的是:因为不同的执行方案的执行效率不同,所以这一步主要是对SQL进行逻辑选择优化。


MySQL 通过分析器知道了SQL要做什么,通过优化器知道了SQL该怎么做。于是进入了执行器阶段,开始执行语句,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息。如果有权限,就会去调用引擎的接口,返回接口执行的结果。


Mysql是如何执行查询语句的?

SQL语句大致可以分为2类,一种是查询操作,一种是更新(插入,更新,删除)操作。我们将先分析下查询语句,语句如下:

如上SQL,实现查询学号为9527的数学成绩,我们分析下这个语句的执行流程:

step1 连接器:先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在MySQL 8.0 版本以前,会先查询缓存,以这条sql语句为key在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。

step2 分析器:通过分析器进行词法分析,提取SQL语句的关键字,比如提取上面这个语句是查询SELECT、WHERE,提取需要查询的表名为CourseInfo,提取查询所有的字段为StudentId、Score,提取查询条件为 Course= 'Math' 与 StudentId = 9527。

然后判断在 这个SQL 语句是否有语法错误,比如关键词是否正确、各字段是否在CourseInfo种存在等等,如果检查没问题就执行下一步。

step3 优化器:接下来就是优化器进行确定执行方案,上面的SQL语句,存在有两种执行方案:

  • 方案一:先查询课程为数学的所有学生的成绩,然后再查询其学号为9527的成绩。
  • 方案二:先查询学号为9527的所有科目的成绩,然后再查询其科目为数学的成绩。

因此,优化器需根据自己的优化算法选择自己认为执行效率最高的一个方案(优化器认为不一定是最好)。

step4 执行器:进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。


MySQL是如何执行更新语句的?

接下来我们再看一下更新语句如何执行的,SQL语句如下:

如上SQL,我们更新学号为9527的学生的数学成绩为96分。

查询语句的执行流程,更新语句也是同样会走一遍。只不过执行更新语句时,需要记录日志,于是引入了日志模块,MySQL 自带的日志模块式 binlog(归档日志),所有的存储引擎都可以使用,同时,InnoDB引擎自带redo log 日志模块,我们将以InnoDB 引擎模式下,来看更新语句的执行流程,如下:

step1 连接器:先检查该语句是否有权限,如果没有权限,直接返回错误信息。

step2 查缓存:在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句就会把表 CourseInfo 上所有缓存结果都清空。这也就是我们一般不建议使用查询缓存的原因。

step3 分析器:分析器会通过词法和语法解析知道这是一条更新语句。

step4 优化器:优化器决定要使用 Course 这个索引。

step5 执行器:执行器先查询到学号为 9527的数学成绩记录,如果有缓存,则会使用缓存的查询结果。然后拿到查询的结果,把 Score 改为 96,得到一行新的数据,再调用引擎接口写入这行新数据,InnoDB 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态,然后告知执行器执行完成了,随时可以提交事务。执行器收到通知后记录binlog,然后调用引擎的提交事务接口,InnoDB 引擎把刚刚写入的 redo log 改成提交 commit 状态,更新完成。


相关阅读 : SQL查询语句的执行顺序解析


,
    推荐阅读
  • 欢乐颂蒋欣穿绿色的衣服哪一集(细数欢乐颂里给我们种的草)

    中国上海,欢乐颂小区19号楼22层住着五个女人。灵感来源于纪梵希高级定制,将高级手工蕾丝融入护肤领域,与独家专利配方具有非凡生命力的"墨藻生命精萃"融合,带来出乎意料的抗老功效。第七集里,樊胜美手上拿的这款纪梵希小羊皮唇膏,也让本公举盯上了!↓兰芝气垫BB霜SPF30PARMB305特殊科技舒缓降温使用后即刻令肌肤温度下降3度,双重容器隔离炎热,维持海绵的温度。《欢乐颂》才播出了13集,就给我们安利了这么多好东西!

  • 梅雨季节衣服不干有味怎么办(梅雨季节衣服不干有味解决方法)

    梅雨季节衣服不干有味怎么办?以下内容希望对你有帮助!黑色能吸收热量及紫外线,并有杀菌功能,并不会出现捂坏的情况,比自然晾晒干得快,特别适合在阴雨天晾衣服用。如果是袜子这样的小件,可以放在正在使用的显示器上烘干。把铁丝衣架两端1/3处用力向前弯曲,衣架变成立体的,晾晒衣服时,前、后身就不会贴在一起,衣物内侧通风可以大大缩短晾晒的时间,阴雨天晾衣服可以快速晾干。

  • 沙漠鹰有哪些(盘点那些生不逢时的战鹰们)

    但是军方却不买账。美国空军于1991年4月23日宣布YF-22获选优胜。YF-23一共只有生产两架原型机,目前都已经不再飞行。1991年4月8日,美国陆军宣布波音、西科斯基公司小组获胜,LHX随之进入原型机研制阶段。运-10由于各种原因最终没有投产。,2000年2月29日首飞,只有1架技术验证机。1969年1月,在完成了最后一次试验飞行之后,被送进俄亥俄州的怀特,帕特森空军基地博物馆。

  • 海贼王热血航线怎么参加狙击王的试炼(海贼王热血航线如何参加狙击王的试炼)

    下面更多详细答案一起来看看吧!海贼王热血航线怎么参加狙击王的试炼工具/原料:华为P40,MIUI12.0.0.1,海贼王热血航线1.0.7。第一步玩家们登录自己的大区,在游戏的主页面找到玩法选项。这里我们需要选择的是第一个游戏狙击王点击进入。

  • 阿胶糕速冻一年还能不能食用(阿胶糕速冻一年还能食用吗)

    阿胶糕放这种食物在冰箱中冷藏了一年,这个时候是不可以食用的冷藏通常至少可以保质一个星期左右,即便是冷冻,也只只可以保质2个月到3个月之间,接下来我们就来聊聊关于阿胶糕速冻一年还能不能食用?阿胶糕速冻一年还能不能食用阿胶糕放这种食物在冰箱中冷藏了一年,这个时候是不可以食用的。而到了七八月的炎热天,高温也有可能导致阿胶融化。因此,不建议食用保存超过两个月的阿胶。

  • 2021广州国际汽车展览会门票多少钱(广州国际汽车展览会2020门票)

    第十九届广州国际汽车展览会将于2021年11月19日至28日在中国进出口商品交易会展馆举办,11月19日为媒体日。欢迎全球观众、媒体及业内人士前来参观。2021广州国际汽车展览会门票多少钱?11月19日为媒体日,仅对国内外媒体及特邀嘉宾开放。

  • 孩子咳嗽感冒流鼻涕小妙招(小孩感冒咳嗽流鼻涕)

    闺女感冒了,咳嗽,流鼻涕。按照医嘱按时吃药会很快好起来。于是改用第二方案,拿个吸管,放在奶瓶盖中,让小家伙吸,无效,屁孩知道是药仍抗拒。改用第三方案,拿小勺子喂,无效,甚至打翻药。于是又软下来苦口婆心地劝说,让她乖点,喝药,妈妈就不离开了,可这小家伙仍拒药,比革命烈士更坚决立场。改用第六方案,滴管滴,可小家伙很快发现是药,只让滴一次,决不上第二次当了。终于搞定这小家伙了。

  • WE战队的成员都是谁啊?(WE战队的成员简述)

    WE战队的成员都是谁啊WE.IGE的队员包括有:WE.IGE.Suho:中国第一精灵,左手会跳舞的男人。在第二届中韩对抗赛上勇夺冠军,并在Acon4上取得了季军的成绩。WE.IGE.Sky:Sky流创始人,WCG2005全球总决赛魔兽冠军。我们毫不怀疑其世界顶尖选手的实力。WE.IGE.WyW:中国星际Zerg第一高手。WE.IGE.DuCui:原Lion战队主力,国内顶尖orc玩家。WE.IGE.TeD:国内亡灵新秀,第一届“SoulWar激战台”擂主。

  • 新工科专业有哪些(有这五种)

    新工科专业有哪些?大数据类大数据是众多学科与统计学交叉产生的一门新兴学科,涉及数据挖掘、云计算等数学,我来为大家科普一下关于新工科专业有哪些?云计算,是指“超级计算集群”经过网络输送各种计算机服务及数据。智能科学与技术类。智能科学与技术专业面向前沿高新技术的基础性本科专业,覆盖面很广。光电信息科学与工程类。该专业主要学习光学、机械学、电子学及计算机科学基础理论及专业知识。

  • 人和自然的关系(关系有哪些)

    不论是以屈从于“神”的方式,还是以屈从于“道”的方式,敬畏都是人存在的统一姿势。在这个时期,西方艺术以描绘“神”为主题,东方艺术则以领悟“道”为宗旨。科学革命打破了人类的一切禁忌。神不再是世界的主体,而承载“道”的宇宙则被解释成不过是一群根据万有引力漂浮在太空的平凡球体。于是,无论是西方的神还是东方的道都变得不值一提。战争与环境问题挑战了人类理性的绝对地位。