sql查询是如何执行的?



连接器

 建立链接比较复杂,建议使用长连接,需要注意,mysql在执行过程中临时使用的内存是管理在连接对象里面的,只有断开链接的时候才会释放。

解决方案:1. 定期断开链接(一般代理层会做) 2.  5.7以后可以使用mysql_reset_connection来初始化链接资源

show processlist ;  -- 查所有连接。复制代码

缓存

key value形式存储,key是sql语句,value是查询结果。不建议使用缓存,

缓存适合场景,静态表,比如系统配置表,mysql8.0彻底删除缓存


分析器

除了此法分析之外,会判断表和字段是否存在。都在分析器这一层解决。


优化器

分析器之后mysql已经知道要做什么了,再次之前需要进行优化处理。比如下面一条sql

select * from t1 join t2 using(ID) where t1.a = 1 and t2.b = 1;复制代码

1. 执行t1 并找出a=1,关联t2,找出t2.b=1 的值。

2. 执行t2并找出b=1,关联t1,,找出t1.a=1的值。

具体使用那条规则是由优化器来决定的。


执行器

mysql通过分析器知道自己要做什么。通过优化器知道自己该怎们做。于是进入执行器

首先判断是否有权限,如果有会调用存储引擎的接口,例如下面一条sql

select * from T where name = 't';  -- name无索引复制代码

1. innodb存储引擎会取表的第一行,判断name是否等于t,不是跳过,是的存到结果集

2. 取下一行,重复相同的逻辑,直到遍历所有结果,然后把满足结果集返回给客户端。


慢查询日志中通过 rows_examined字段,可以直到这个语句扫描了多少行。



转载于:https://juejin.im/post/5cc279ccf265da03bb6fb95c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值