暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL一条查询语句的执行流程

Feanmy的博客 2021-03-23
1371

MySQL分为Server层和存储引擎层两部分

Server层

  • Server层包括连接器、查询缓存、分析器、优化器、执行器
  • 所有的内置函数以及所有跨存储引擎的功能都在此层实现

不同的存储引擎共用一个Server层

连接器

当客户端程序连接MySQL时,此时负责处理的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。

  • 客户端与服务端建立连接后首先校验用户名和密码,如果校验未通过,会返回Access denied for user
    错误
  • 用户名密码校验通过后,连接器会到权限表查询登入账号拥有的权限。直到当前连接关闭,所有的权限逻辑判断,都会以当前所查询到的权限为依据

所以一个用户成功登入后,在断开连接之前,如果管理员修改了其权限,是不会影响当前连接。新的权限只会影响以后的新连接。

查询缓存

查询缓存会将执行过的语句及其结果以key-value对的形式缓存在内存中

MySQL收到一个查询请求后,会先检查查询缓存,是否执行过此语句。如果找到与语句对应的key,则直接向客户端返回value。如果语句不在查询缓存中,就会继续往下执行。执行完成后,执行语句及结果会被缓存到查询缓存中。

查询缓存利大于弊还是弊大于利?

  • 查询缓存的失效非常频繁,只要对一个表更新,此表上的所有查询缓存都会失效。对于更新压力大的数据库,查询缓存的命中率非常低。
  • MySQL8.0开始彻底没有查询缓存

分析器

分析器有两个操作:

  1. 词法分析
  2. 语法分析

由于SQL语句是由多个字符串和空格组成,词法分析就是要识别每个字符串是什么,有什么含义;语法分析根据语法规则,判断输入的SQL语句是否满足MySQL语法。

优化器

优化器是在表中有多个索引时,决定使用哪个索引;或在多表关联时,决定表的连接顺序。

执行器

在执行语句之前,执行器会先判断当前用户对表是否有查询权限,如果没有,返回错误。


最后修改时间:2021-03-23 14:30:21
文章转载自Feanmy的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论