mysql执行查找的语句_mysql 执行查询语句流程

mysql结构图(mysql结构及优化)

执行查询sql时,mysql内部流程如下:

46c36da58281

查询流程图

1、客户端发送查询给服务器

2、服务器查询是否命中缓存,命中则立刻返回结果;否则继续执行

3、服务器进行SQL 解析、预处理,并在优化器中生成执行计划

4、服务端根据执行计划,调用存储引擎的API来执行查询

5、将结果返回客户端

1、客户端与服务端通讯

客户端与服务端通讯协议是“半双工”的。任意时刻,两者只能单向传输数据,不能同时互传。只有一方发送完毕,另外一方接收完毕,整个流程才能结束。

2、查询缓存

解析查询语句之前,服务端会检查是否打开缓存。如果缓存为打开状态,通过查询语句的哈希查找实现。如果该哈希值与缓存中的查询哈希不同,则不匹配缓存结果,直接进入下一个流程;如果两哈希值匹配,则会进行查询权限校验;权限校验通过之后,则直接返回缓存中的查询结果,无需继续处理sql。

3、查询优化处理

该阶段又分为三个阶段, 解析sql、预处理、优化sql执行计划。任一过程出现错误,查询都可能终止。

解析sql:通过关键字解析sql语句,并生成对应的 “解析树”,然后解析器使用mysql语法规则 来验证和解析查询。

预处理:预处理器根据一些mysql规则进一步检查和解析数据是否合法

优化器:查询sql通过解析和验证之后的语法树,将有优化器来转化为执行计划。一条查询可以有多种执行方式,最后返回相同结果。优化器找到之中最好的执行计划

执行计划:mysql最终生成查询的指令树,然后通过存储引擎执行完成这棵指令树并返回结果。最终的执行计划包含了重构查询的全部信息

4、查询执行引擎

在解析和优化阶段,mysql生成的执行计划。查询执行引擎则根据这个执行计划来完成整个查询。执行计划是一个数据结构,而不是像其他关系型数据库那样的字节码。

执行计划的指令执行期间,会大量调用存储引擎实现接口的操作,来完成查询。

5、返回给客户端

查询执行的最后一个阶段将结果返回给客户端,即使客户端不需要的返回结果,mysql仍然返回查询的一些信息,如影响的行数。如果开启了缓存,mysql 也会将结果放到查询缓存中。

返回客户端数据是一个增量的过程,这样减少服务器存储结果的压力,另外客户端也能尽快拿到返回的结果。结果集中的每一行都会以一个满足mysql客户端/服务器通信协议的包发送,再通过tcp协议进行传输,在tcp传输的过程中,可能对mysql的封包进行缓存然后批量传输。

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值