[MySQL]sql语句的查询执行过程

目录

前言:

1.mysql的结构

2. 长连接和短连接?

2.1 长时间使用长连接会造成OOM,使内存涨得过快

3. 查询缓存(MYSQL8.0已经删除,所以只需要知道一下即可)

3.1 尽量不适用查询缓存

3.2 将查询缓存关闭

4. 分析器

5. 优化器

6. 执行器

7.总结


前言:

一般一个sql查询执行中,所经历的是连接-分析器-优化器(选择索引)-执行器 然后在进行访问存储引擎。

1.mysql的结构

连接器--管理连接,验证权限(认为是链接到这个软件上)

分析器--语法分析,词法分析(有点像自然语言处理的课程)

查询缓存--命中返回结构(涉及到mysql的4种引擎) PS:https://blog.csdn.net/pmdream/article/details/100558048#11.mysql%E7%9A%84%E5%BC%95%E6%93%8E%E7%A7%8D%E7%B1%BB%EF%BC%9F  的第十一问

优化器--执行计划,进行选择索引

执行器--操作引擎,返回结果

存出引擎--存储数据

所以,如果有人问起来mysql是包括server层和存储引擎层的。

不同的引擎公用一个server层,可以在创建表的时候指定存储引擎(比如engine=memory)

2. 长连接和短连接?

这个概念是在连接器中提到的。

尽量使用长连接,因为建立连接的过程比较复杂。

2.1 长时间使用长连接会造成OOM,使内存涨得过快

解决方法:定期断开长连接

3. 查询缓存(MYSQL8.0已经删除,所以只需要知道一下即可)

mysql一个查询请求之后,都会进行去缓存里面查找。之前执行的结果可能用key-value的形式缓存在内存中。

key是查询语句,value是查询的结果(也就类似于我们自己项目中的缓存)

如果查询不在缓存中,那么将查询放入缓存。

3.1 尽量不适用查询缓存

因为失效很频繁,只要对表进行更新,这个表所有的查询缓存都会被清空。

那么如果业务是一张静态表,比如系统配置表,可以用查询缓存。

3.2 将查询缓存关闭

将参数 query_cache_type 设置成 DEMAND

如果使用查询缓存,可以显示指定。

select SQL_CACHE * from Table;

4. 分析器

先进行词法分析,在进行语法分析。

语法分析是判断是否符合mysql语法。

5. 优化器

优化器是用来控制使用那个索引。或者join表的连接顺序。

比如两个表a,b 使用join连接

那么既可以先从表a拿数据,在根据条件找表b

也可以根据表b再找表a

执行效率不同,所以就是决定使用什么方案。

6. 执行器

不管有没有索引,都是一条一条的往后面查询,把符合条件的放到结果集。

索引是加快并且定位到合适的范围,然后在一条一条的进行查询。

7.总结

首先搜索引擎也都是调用API接口,然后去找到数据符不符合要查询的东西。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值