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查询语句的执行顺序解析


,
    推荐阅读
  • 肾小结石怎么办(小肾结石解决方法)

    下面内容希望能帮助到你,我们来一起看看吧!肾小结石怎么办可使用拘橼酸钾、碳酸氢钠等药物,如果药物治疗无效,需及时进行手术。对于直径小于4个毫米的肾结石,临床上称为无意义结石,患者可以通过多饮水多排尿来自行排出,在自行排石的过程中,患者和医生一定要有风险意识,一旦卡在输尿管某个狭窄的地方,可能会出现严重的肾绞痛,此时需要立即进行药物干预,比较多见的酸性结石。

  • 韩国硕士排名(韩国硕士国内认可度怎么样)

    众所周知,韩国非常重视海外市场的开拓,特别是对中国市场的投资非常大。现如今韩国各大企业相继进入国内,作为一个注重企业人才本土化的国家,韩国企业更愿意招纳在韩留学的人才。因此,在韩留学的学生在回国后更具竞争力。

  • 汕头濠江区2023年上半年中小学教师资格认定公告

    港澳台居民可在居住地或教师资格考试所在地申请认定中小学教师资格。驻濠部队现役军人和现役武警在部队驻地申请认定中小学教师资格。申请人的体检表应在体检前携带身份证原件或者户口本原件到濠江区教育局4楼人事股审核验证并加盖骑缝印章。申请人的无犯罪记录证明,由教师资格认定机构到有关部门核查。

  • 脖子上长瘤子都是恶性淋巴瘤吗(脖子摸到肿块是不是肿瘤)

    相信很多人都知道,淋巴是人体非常重要的免疫系统,遍布人体的各个部位,除了负责抵抗外来细菌、病毒等侵害,还有负责清理衰老无用的细胞。目前一般认为,导致淋巴瘤的病因可能和基因突变、病毒、病原体感染,还有职业环境因素有关。总的来说,自身的免疫系统是非常重要的,可以预防外来细菌、病毒等的侵害,在日常生活中,要注意健康饮食、保持充足睡眠、释放压力,定时预约做全身体检,才能拥有更好的人生。

  • 念组词(念组词有哪些)

    接下来我们就一起去了解一下吧!念组词念组词有:念旧、挂念、思念、想念、念念不忘、概念、念头、眷念、悼念、概念化、信念、纪念章、记念、垂念、轸念、闪念、恶念。挂念,是一个汉语词语,拼音是guàniàn,意思是想念,牵挂,放心不下。思念,汉语词汇,拼音sīniàn,意思是想念;怀念;指回忆;考虑;思考;思虑;想法。

  • 那些年奇怪的快递名字(史上最奇葩的快递收件名曝光)

    来源:少女兔,作者:大饼、小白

  • 仓央嘉措最美的十首情诗(不负时光不负卿)

    仓央嘉措最美的十首情诗?仓央嘉措最美的十首情诗国庆期间领着喜爱的小宠物狗散步,迎面走来一对男女,女的身穿一套水粉休闲套装,看上去很年轻。与爱人在这个北方小镇生活三十年了,已融入了这里的生活,安享这份宁静的美好光阴。如今,方体会“弱水三千,只取一瓢饮”的抉择与快乐。当然,这期间,坚持,才能度难关。人生的路很多,最让人心动的仍是灵魂深处的求索,愿余生不负时光不负卿。

  • 东北二王逮捕(东北二王有多难抓)

    当时王宗玮在外把风,王宗坊负责撬开门入室盗窃。由于案情重大,公安部门非常重视,下令一定要尽快抓住这两个凶手。慌乱之中,王宗玮再次开枪,打伤了乘警后两人跳车逃跑,窜入了湖南衡阳境内。当他们骑车经过武汉岱山检查站时,骑在前面的王宗坊被民警拦下来检查,发现了他身上的手枪。直到8月底,江苏省江阴市的百货公司发生了一起持枪抢劫案,被抢营业款2万余元。

  • 换车门对车有什么影响(汽车换车门对车有影响吗)

    如果汽车车门在激烈碰撞后大面积损坏变形,与其保养,不如直接更换车门。如果更换门,主要有两个影响,就是油漆的色差和隔音不好。如果在外面的修理厂更换车门,重新喷漆后可能会出现与原车门相比的色差。如果需要更换车门,最好去4s店更换。

  • 绿豆粥的热量(每100克含65大卡)

    绿豆粥的热量绿豆粥热量:65大卡/100g。绿豆具有很好的解毒功效,并且认为绿豆的清热的功效在于皮,解毒之功在内。这样做出来的绿豆粥色泽浑浊,营养价值高,而且有利于人体消化吸收。要想预防中暑,除了可以把绿豆单独熬汤、煲粥之外,我们还可以将绿豆与其他食品一起烹调,这样结束的疗效会更好。绿豆粥的功效非常多,最为常见的还有消炎杀菌的功效,我国中医指出,绿豆属清热解毒类药物。