MySQL逻辑架构(五)——SQL执行流程

一:查询缓存

作用:

Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;
如果没 有,就去数据库中查询,查询出来之后,将数据返回给客户端,同时再以key-value的形式保存在缓存中,其中 key 就是 SQL语句,value 就是查询的结果
注: 查询缓存往往效率不高,所以在 MySQL8.0 之后就抛弃 了这个功能

移除的原因:

1: 两个查询请求在任何字符上的不同(例如:空格、注释、 大小写),都会导致缓存不会命中。
2: 查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如 mysql
        information_schema performance_schema 数据库中的表,那这个请求就不会被缓存
3:缓存失效: MySQL 的缓存系统会监测涉及到的每张表,只要该表的 结构或者数据被修改, 那使用该表的                            所 有缓存查询都将从 缓存中删除!

查询缓存的查看:

show  variables  like  ' %query_cache_type% ' ;    查询当前缓存是否开启
OFF 表示不开启        ON表示开启        DEMAND 表示按需开启
可以在 my.cnf 配置文件中修改   
query_cache_type = 0  表示不开启
query_cache_type = 1  表示开启
query_cache_type = 2  表示按需开启

二:解析器

作用:

对 SQL 语句进行 词法分析 和 语法分析

词法分析 :

MySQL 需要识别出SQL语句中 的字符串分别是什么,代表什么。 
MySQL 从你输入的 "select" 这个关键字识别出来,这是一个查询语 句。
它也要把字符串 “T” 识别成 表名 T” ,把字符串 “ID” 识别成 ID”

语法分析

根据词法分析的结果,语法分析器(比如: Bison )会根据语法规则,
 判断你输 入的这个 SQL 语句是否 满足 MySQL 语法 。
分析完毕之后,如果正确,会生成一颗语法树,如下图所示:
MySQL逻辑架构(五)——SQL执行流程_第1张图片

三:优化器

作用:

确定SQL语句执行的具体的最优的方法。
 如:该 select  *  from  emp  where  id  =  10001 语句,我们可以通过走索引获取到结果
    也可以通过走全表扫描的方式找到结果,优化器就会判断出哪种方案比较好,就会执行哪种方案

四:执行器

作用:

根据优化器得到的方案,调用存储引擎的接口,具体的去执行SQL,得到结果。

流程:

在执行之前需要判断该用户是否 具备权限 。如果没有,就会返回权限错误。
如果具备权限,就执行 SQL 查询,并返回结果。
综上:SQL语句的执行流程为:
MySQL逻辑架构(五)——SQL执行流程_第2张图片

你可能感兴趣的:(MySQL,mysql,sql,架构)