一条SQL的执行过程

在我们学习MySQL时,我们会执行各种SQL语句,今天我们就讨论一下SQL语句的执行过程,聊一聊MySQL的基础架构,看一看MySQL有哪些组件构成,以及这些组件的作用。

MySQL的基础架构图

在这里插入图片描述
简单来说,MySQL可以分为服务层和存储引擎层。
服务层中主要包括:连接器、查询缓存、接下、优化器、执行器等。很多跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,内置函数等。
存储引擎层主要负责数据的存储以及提取,支持多种存储引擎,比如常见的InnoDB、MyISAM、Memory等。其中InnoDB在最常用的版本中是默认的存储引擎。

服务层基本组件

连接器

在我们安装完MySQL数据库准备使用时,我们第一件要做的就是连接数据库,这是就用到了连接器,连接器主要负责和客户端建立连接、进行用户的身份认证(包括检验账户密码。权限等操作)。

在客户端对服务器发起请求验证,完成经典的TCP握手后,连接器就会开始验证身份,也就是输入的用户名和密码。
如果用户名或者密码出现错误时,就会出现“Access denied for user”错误,如果认证通过,连接器就会到权限表查询,用户拥有的权限,以后在该连接里所有的关于权限的判断都会依赖你读到的权限,这也就意味着,连接成功后即使你的权限被修改,也不会影响你在该连接下的权限,只会影响你新建的连接。

在客户端建立连接的过程通常都是比较复杂的,也是比较耗时的,所以在使用的过程中我们要尽量减少建立连接的动作,尽量使用长连接。
如果我们都使用长连接,可能会发现MySQL的内存涨的很快,长时间积累下去,会导致内存占用太大,被系统强行杀死,导致MySQL异常重启。

在这种情况下,一般可以定期断开长连接。如果使用的MySQL是5.7及以上的版本,可以通过执行mysql_reset_connection来重新初始化连接资源,并且该过程不需要重新连接以及权限验证。

查询缓存

在我们执行select查询时,执行的逻辑首先会来到查询缓存这一步,先去缓存中查看一下,是否执行过该语句。如果不再缓存中,就会继续执行后面的阶段。但是大多数情况下是不建议使用的,因为查询缓存失效是非常频繁的。在MySQL8.0版本中已经放弃了该功能。
解析器

这也是SQL语句真正执行的开始。首先MySQL会对我们写入的SQL语句做解析。首先是词法分析,拆分识别出每一个关键字。比如识别出“select”,知道这是一个查询语句。做完识别后就要做“语法分析”,根据语规则,判断输入的SQL语句是否满足MySQL的语法。

优化器

经过解析器后,MySQL就知道你要做什么,接着就会经过优化器的处理。比如SQL语句中存在多个多个索引,优化器会决定使用哪一个索引。

执行器

通过解析器MySQL知道了要做什么,通过了优化器MySQL知道了如何最优的执行,接下来就是到了执行器这里,进行SQL语句的执行。这里会先判断一下是否有执行的权限,如果没有就会报错,否则就会根据表的引擎定义,去使用引擎提供的接口,执行完成SQL语句。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值