【MYSQL】一条SQL查询语句在MYSQL中是如何执行的?

一、MYSQL基础架构?

首先,我们得先了解MYSQL的基础架构,如下图所示:

在这里插入图片描述
从上图可以看出,MYSQL可以分为server层和存储引擎层。
server层包括连接器查询缓存分析器优化器执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
存储引擎层负责数据的存储和提取。其架构是插件模式的,支持InnoDB、MyISAM、Memory等多种存储引擎,现在最常用的是InnoDB存储引擎,从MYSQL5.5.5版本开始成为了默认存储引擎。

小知识点
指定存储引擎命令(比如在创建表的时候指定Memory存储引擎):engine=memory【在创建表的语句中加上这条命令即可】

二、架构详解

在这部分主要来了解server层和存储引擎层各个部分的作用:

  • 连接器: 连接器负责跟客户端建立连接、获取权限、维持和管理连接
  • 查询缓存: 如果命中缓存则直接返回结果
  • 分析器: 对SQL进行词法分析、语法分析(知道该做什么)
  • 优化器: 选择效率高的方案执行,选择索引(知道该怎么做)
  • 执行器: 开始执行语句
  • 存储引擎: 存储数据,提供读写接口

三、SQL语句执行过程

比如有这样一条语句:select * from T where id=10;

  • 客户端请求连接MYSQL数据库
  • 连接器负责跟客户端建立连接、获取权限以及维持和管理连接
  • 连接建立完成后,就会执行select语句了。MYSQL拿到一个查询请求后,会先到查询缓存中看看,如果该条语句能够直接在缓存中找到,则将结果直接返回给客户端。
  • 如果没有命中查询缓存,就要开始执行语句了。这个时候分析器就会做词法分析和语法分析,判断客户想要干什么
  • 知道了要干什么以后,就由优化器来确定怎么干,优化器会对执行的SQL语句选择一种最优的执行方法
  • 通过优化器知道了怎么做以后,执行器就开始执行语句,执行时会先看用户是否有执行权限,如果有权限,执行器就会根据表的引擎定义,去使用这个引擎提供的接口
  • 语句执行完了以后,就去引擎层获取数据返回(如果开启查询缓存的话就会缓存查询的语句及结果)

小知识点:
【什么是长连接?什么是短连接?】
数据库中,长连接是指客户和数据库连接成功后,如果客户端有持续请求,则一直使用同一个连接;短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个连接

小知识点:
【之前执行过的SQL语句及结果在查询缓存中如何存储?】
之前执行过的SQL语句以及结果在查询缓存中以key-value的形式缓存在内存中,key是查询的语句,value是查询的结果。

小知识点:
【为什么大多数情况下不建议使用查询缓存?】
因为查询缓存往往弊大于利。查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。对于更新压力较大的数据库来说,查询缓存的命中率会非常低。对于一张很长时间才会更新的表【比如说一个系统配置表】来说,对于它的查询才适合用查询缓存。

✨✨✨
加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值