[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的流程 先聊到这啦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值