2020-10-16MySQL基础架构图(查询SQL是怎么执行的)(转)

一条查询SQL语句是如何在MySQL内部执行的?先看下MySQL的基础架构图吧.
MySQL基础架构图
  大体来说,MySQL可以分为Server层和存储引擎层两部分. Server层包括连接器,查询缓存,分析器,优化器,执⾏器等,涵盖 MySQL的⼤多数核⼼服务功能,以及所有的内置函数(如⽇期、时间、数学和加密函数等),所有跨存储引擎的功能都在这⼀层实现,⽐如存储过程,触发器,视图等.⽽存储引擎层负责数据的存储和提取.其架构模式是插件式的,⽀持InnoDB, MyISAM,Memory等多个存储引擎。

介绍下Server层的主要组成部分及功能:
一.连接器: 管理连接,权限校验
  首先,我们会从客户端连接到数据库上,接待我们的就是连接器。连接器负责跟客户端建立连接,获取权限,维持和管理连接.连接分为长连接和短连接,短连接是指每次执行完很少的几次查询后,就断开连接。它的问题在于建立连接的过程很复杂,性能很差,所以我们尽量使用长连接。而长连接也有特别占用内存的问题,此时有两种解决方案:
1.定期断开长连接.
2.如果是MySQL5.7或更高的版本,可以通过执行mysql_reset_connection来初始化连接资源,这个过程不需要重连及权限校验,但是会将连接恢复到刚创建时的状态。

二.查询缓存:命中直接返回结果
  建立完连接,可以执行查询语句了,首先我们会先到查询缓存中看看,查询语句和结果会以key-value的形式存放在内存中,如果查询语句完全相同,就直接将value返回给客户端。如果语句不在查询缓存中,就会继续后面的执行阶段,并将执行结果放到查询缓存中。查询缓存和我们使用先查redis,再读库的方式非常像,但我们建议不要使用,因为往往弊大于利,只要我们对一张表有所更新,那么这张表的所有查询缓存都会被清空,所以查询缓存的命中率会非常低,并且在MySQL8.0版本中,已经直接将查询缓存的整块功能删除掉了。

三.分析器:词法分析和语法分析
  如果没有命中缓存,那么就要对SQL语句进行解析了,MySQL会先做词法分析,识别出其中的关键字,表名,列名;然后MySQL再做语法分析,判断语法是否正确。

四.优化器:执行计划生成,索引选择
  优化器在表里有多个索引的时候,可以决定使用哪一个,这样语句的执行方案就确定下来了,然后进入执行器阶段.

五.执行器:操作引擎,返回结果
  开始执行的时候,会先判断客户端对这个表有没有查询权限,如果没有,返回错误;如果有,就打开表继续执行,并根据引擎定义去使用这个引擎提供的接口,例如调用InnoDB引擎查询数据,逐行比对是否满足条件,直到最后一行,将满足条件的记录作为结果集返回给客户端。整个存储引擎都是执行器的一部分,因此执行器包括了查询过程中的所有内容,上图在这里画的并不是很正确(编者按)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值