MySQL 内部Server 层机制
  3agd4Sagrx5S 2023年11月15日 33 0

主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

1.连接器

像navicat、JDBC、MySQL等客户端软件需要先和mysql建立通信之后,才能对其中的SQL进一步执行,连接器就是服务层负责和客户端建立连接的工作。

连接器负责和客户端建立连接、获取权限、维持和管理连接。连接命令:

mysql ‐h host[数据库地址] ‐u root[用户] ‐p root[密码] ‐P 3306

mysql通过三次握手后,通过用户名和密码校验权限,一旦建立了连接,后续即使修改了该用户的权限也不会影响此次连接的权限。

2.查询缓存

建立连接后执行的select语句,会优先查询缓存是否存在同一条语句的缓存,先前执行过的语句会被缓存以Key-Value的形式到内存中,如果存在直接返回结果,如果不存在则执行后续流程;mysql8.0默认是关闭的。

为什么大多数情况下查询缓存用不到?

只要对表更新(增删改),关于这张表的查询缓存会全部被清空。

因此我们可以相对应的对一些更新极少的表使用查询缓存,如:系统配置表,字典表。

 my.cnf
2 #query_cache_type有3个值 0代表关闭查询缓存OFF,1代表开启ON,2(DEMAND)代表当sql语句中有SQL_CACHE关键
词时才缓存
3 query_cache_type=2

这样默认不使用查询缓存,需要使用时添加 SQL_CACHE 字段指定:

select SQL_CACHE * from test where ID=5;

查看当前MySQL是否开启了缓存

 show  variables like "%query_cache_type%";

MySQL 内部Server 层机制_服务层

很明显,查询缓存是关闭的。

3.分析器

当缓存中没有的相应的语句,就要开始执行SQL语句,首先需要分析器分析SQL语句;

SQl语句是我们人类方便写和读所有的语言,而计算机不会识别,分析器将SQL语句中的字符串字段转化为mysql可以识别的列名和表名;同时也可以判断SQL语句语法是否正确。

4.优化器

经过分析器转化后,SQL转化为MySQL可以识别和执行的语句,优化器是表里有多个索引时决定采用最优索引;例如当查询一个数据较小的表时,即使有索引,也不一定会走索引,很大概率会全表扫描;MySQL内部优化机制都会在这一步执行。

5.执行器

执行前首先判断有没有权限,有权限会根据引擎层提供的接口使用接口。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
3agd4Sagrx5S