MySQL一条SQL的执行流程

简述

一条sql的执行流程,本质上就是客户端与服务器建立连接,然后客户端把sql(文本)发送给服务器进行执行,服务器在得出结果之后发回给客户端的过程。

服务器架构

本质上,MySQL服务可以分成server层和存储引擎两个部分,为了方便理解,在server层和存储引擎之间我们可以认为有一个API层,专门给server层提供操作数据的接口并屏蔽存储引擎的底层实现。

  • server层:用来处理连接,优化sql,解析sql等操作。
  • 存储引擎:规定了存储数据的底层结构,并提供数据的操作方法等。

在这里插入图片描述

server层各个组件的作用

连接器

用来处理客户端的连接请求,并对客户端身份进行验证。MySQL在有客户端连接之后,会新建一个线程,该线程负责处理客户端,客户端断开之后,线程不会销毁,而是会存放起来等待下一个客户端连接。
因此,如果客户端连接数量太多,那么线程服务器开启的线程就会增多,会影响性能,所以MySQL有最大连接数限制,默认是151。其实应该还有一个预备线程,专门留给超级用户的。

查询缓存

当用户执行查询时,首先会来查询是否存在缓存,如果缓存命中,就可以直接返回结果,不用继续往下执行了。
MySQL的缓存有一些比较坑的地方:

  1. 查询语句必须一模一样,才能命中缓存,多个空格都不行。
  2. 表数据更新时,关联的缓存全部失效。
  3. 查询操作执行前后都要去操作缓存,消耗性能。

因此在MySQL 8.0的时候,缓存已经被移除了。

解析器

解析sql的意图(select、insert等)以及校验语法是否正确。

优化器

生成一个执行计划,我们可以通过EXPLAIN查看该执行计划,主要对sql进行优化,形成最优的处理,比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等。

执行器

负责调用接口并获取sql的执行结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值