主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 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%";
很明显,查询缓存是关闭的。
3.分析器
当缓存中没有的相应的语句,就要开始执行SQL语句,首先需要分析器分析SQL语句;
SQl语句是我们人类方便写和读所有的语言,而计算机不会识别,分析器将SQL语句中的字符串字段转化为mysql可以识别的列名和表名;同时也可以判断SQL语句语法是否正确。
4.优化器
经过分析器转化后,SQL转化为MySQL可以识别和执行的语句,优化器是表里有多个索引时决定采用最优索引;例如当查询一个数据较小的表时,即使有索引,也不一定会走索引,很大概率会全表扫描;MySQL内部优化机制都会在这一步执行。
5.执行器
执行前首先判断有没有权限,有权限会根据引擎层提供的接口使用接口。
标签:语句,缓存,MySQL,分析器,Server,SQL,机制,查询 From: https://blog.51cto.com/u_16280730/8294953