
MySQL分为Server层和存储引擎层两部分
Server层
Server层包括连接器、查询缓存、分析器、优化器、执行器 所有的内置函数以及所有跨存储引擎的功能都在此层实现
不同的存储引擎共用一个Server层
连接器
当客户端程序连接MySQL时,此时负责处理的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。
客户端与服务端建立连接后首先校验用户名和密码,如果校验未通过,会返回 Access denied for user
错误用户名密码校验通过后,连接器会到权限表查询登入账号拥有的权限。直到当前连接关闭,所有的权限逻辑判断,都会以当前所查询到的权限为依据
所以一个用户成功登入后,在断开连接之前,如果管理员修改了其权限,是不会影响当前连接。新的权限只会影响以后的新连接。
查询缓存
查询缓存会将执行过的语句及其结果以key-value对的形式缓存在内存中
MySQL收到一个查询请求后,会先检查查询缓存,是否执行过此语句。如果找到与语句对应的key,则直接向客户端返回value。如果语句不在查询缓存中,就会继续往下执行。执行完成后,执行语句及结果会被缓存到查询缓存中。
查询缓存利大于弊还是弊大于利?
查询缓存的失效非常频繁,只要对一个表更新,此表上的所有查询缓存都会失效。对于更新压力大的数据库,查询缓存的命中率非常低。MySQL8.0开始彻底没有查询缓存
分析器
分析器有两个操作:
词法分析 语法分析
由于SQL语句是由多个字符串和空格组成,词法分析就是要识别每个字符串是什么,有什么含义;语法分析根据语法规则,判断输入的SQL语句是否满足MySQL语法。
优化器
优化器是在表中有多个索引时,决定使用哪个索引;或在多表关联时,决定表的连接顺序。
执行器
在执行语句之前,执行器会先判断当前用户对表是否有查询权限,如果没有,返回错误。
最后修改时间:2021-03-23 14:30:21
文章转载自Feanmy的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




