当前位置:   article > 正文

[MySQL]SQL语句查询执行流程_mysql 怎么查看一个sql的执行过程

mysql 怎么查看一个sql的执行过程

MySQL查询一条语句流程的架构图如下:

基于5.7版本,8.0版本去除了查询缓存

 下面我们开始说明一下执行流程:

第一、连接

首先MySQL是C/S应用架构。

客户端 也就是咱们所进行SQL语句查询端

服务器端 简单来说 进行sql语句的执行 与 数据存储。

那么,如何进行连接呢?

MySQL服务默认监听3306端口,一般我们都会使用TCP的方式进行连接。

数据库的连接也是有限制的 一般默认连接数是 100 或 151 。

我们怎么查看MySQL最大连接数?

show variables like '%max_connections%';

我们怎么设置MySQL最大连接 ?

set global max_connections = 200;

 第二、查询缓存

查询缓存的功能 在MySQL8.0 已经被移除了

如图示可以看到,在5.7版本中 连接上数据库后 是先进行查询缓存的,如果SQL语句一模一样、且所查表中数据没有变化的情况,是直接会秒查询出来。

所以,对于有大量更新内容时,有些浪费资源了。

第三、分析器

先从两个方面来讲 词法解析 语法解析

词法解析

检查单词是否正确、 检查关键字的应用

语法解析

先一下SQL语句在执行时的顺序是怎样的

1-from 2-on 3-join 4-where 5-group by 6-having 7-select 8-order by 9-limit

根据这些顺序 及语法的检查,MySQL会生成一个数据结构,这个结构我们称为 “解析树”

第四、优化器

经过了分析器之后,使我们的SQL语法没有问题了,但是在真正执行SQL之前 还需要经过优化器的优化处理。优化器会对你的SQL选择它认为最优的执行方案进行执行

优化器的作用有:

·读取SQL解析树

·对SQL语句进行默认优化 ---- 选择对应索引

·生成执行计划。 (explain select * from table 可以看到执行计划)

第五、执行器

首先会对当前用户进行执行权限校验,如果没有权限,就会返回没有权限的错误:ERROR 1142 (42000): SELECT command denied to user。

如果有权限,就会去调用引擎的接口,返回接口执行的结果。

第六、引擎层

不同的存储引擎存放数据的方式不同,产生的文件也不一样,innodb是一个 myisam 是两个。

在没有指定存储引擎的时候,MySQL会使用默认的引擎。5.5.5之前默认存储引擎是 MyISAM

5.5.5之后默认使用的是 InnoDB。

存储引擎如何选择 详解,可以查阅相关资料。

查询一条SQL的流程 先聊到这啦!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/278559
推荐阅读
相关标签
  

闽ICP备14008679号