【MySql专栏】—— sql语句的执行流程

前言:平时我们在开发的时候,经常要使用数据库来存放我们的信息,但是都只是简单的使用sql语句来操作数据库读取信息和修改信息,并没有深入了解Mysql,最近本来也在极客时间上学习MySql的知识,将此专栏作为读书笔记,记录学习的重点和自己的一些粗浅的看法,希望能帮助看到这个专栏的人快速理解MySql。

今天这篇博文,简单介绍一下一条Sql语句的是怎么在MySql中进行运行的,首先我们来看一张执行的流程图:

从图中,我们可以看出来MySql可以分为两个部分,Server层和 存储引擎层。Server层的主要结构由连接器、分析器、优化器和执行器组成;存储引擎层则由MySql提供的各类存储引擎组成的集合,例如:InnoDB、MyISAM。

下面我们从一条sql语句来讲解整个执行的流程,SQL语句如下:

select * from city where id = 1

当我们对数据库进行操作的时候,首先是要连上我们所需的数据库,这个时候就是进入我们的连接器来操作,我们在客户端输入我们的数据库名,登录的用户名和密码来请求连接:

当我们通过认证以后,连接器会根据我们登录的账号来分配给我们相应的数据库操作权限,然后就会根据我们的传入的sql语句去查询我们的缓存,如果在缓存中查到我们需要的数据,直接返回客户端,那么后面的流程都不需要执行。哇,那感觉这个功能好强大,只要查询到缓存都需要后面的操作,那查询速度还不飞起来了!但其实在实际开发中,我们都是关闭这个功能的。因为:

查询缓存的命中率极低,只要我们对某个表进行了更新操作,那么这个表的所有查询缓存就会被清空!所以多去查询一遍缓存反而浪费性能,在设置MySql配置时,可以将query_cache_type=DEMAND.,来关闭查询缓存的步骤,如果只是某个特定的查询语句去查询缓存的话,我们可以显示的sql上进行操作,只要在语句中加入SQL_CACHE,例如之前的语句:

select SQL_CACHE * from city where id = 1

当没有命中缓存时,就会进入下一个流程分析器中,分析器的作用就是对我们sql语句进行语法分析,分析器的作用就是将我们的sql中的每个“单词”进行语法解析,判断是否有语法错误,比我我们的例子的语句:从select知道这条语句是查询,city对应的数据库中的表明,id对应表中的某个字段,但是在分析器中进行的,如何书写的语句有语法错误,就会抛出对应的异常。

当sql语句的语法分析通过后,就进入了优化器,优化器的主要作用就是在执行sql语句之前优化我们的sql语句,比如,表中有多个索引时,到底是用那个索引来执行语句;当A和B两个表关联查询时,是先查询A表,还是先查询B表,都是在这一阶段进行的。

上述流程都顺利通过后,就进入了我们的执行器,进入执行器后,首先要做的就是在通过连接器进入的账号,是否有权限进行当前的操作,没有对应的权限,就会返回错误,如果有,就会进行语句所对应的操作,根据我们查询的表的引擎,去对应的存储引擎中,去操作我们的数据,并将操作后的数据返回给我们的客户端,至此,一条sql语句就全部完成。

这篇文章就到这里,感兴趣的小伙伴,可关注本专栏,你的关注就是我更新的最大动力MySql专栏

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值