一条sql在mysql中是如何执行的

在这里插入图片描述
先上图为敬

从图上可以看出,我们是客户端,mysql主要由两个部分组成

1.Server层,其中包含

连接器 负责 管理连接,权限验证
查询缓存 先去缓存中去查找,是否有要查询的结果,如果有的话,直接返回查询结果
分析器 分析传输过来的sql语句,具体是要干什么
优化器 在已有的情况下,选择最优的执行路径
执行器 连接存储引擎,执行语句,返回结果

2.存储引擎 负责数据的存储,以及提供读写接口

存储引擎包含InnoDB、MyISAM、Memory,从MySQL 5.5.5版本开始创建表默认是InnoDB。不同的存储引擎共用一个Server层,也就是从连接器到执行器的部分。

首先客户端开始连接数据库,连接器负责和客户建立连接,并且验证客户的权限,维持和管理连接
密码错误的话 会报"Access denied for user"
如果账号密码都验证通过则会,去权限表里边去查,这个用户的权限。之后的一些操作都会根据当前获取到的权限去判断,即使你改了权限,也要重新登陆才会生效。

连接分为长连接和短连接:长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。
一般都是长连接,因为建立连接的过程通常是比较复杂的,时间默认8个小时失效
但是全部使用长连接时间设置的比较长的话,内存的占用就会特别快,直到被系统强行杀掉,OOM,现象就是mysqll异常重启了

解决方案有:
1.定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。
2.如果是MySQL 5.7或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

查询过程:

1.客户端通过连接器连接数据库;
2.查看查询缓存中是否存在,已该语句为key的查询缓存,如果有则直接返回结果,如果没有缓存,则进行下一步;
3.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值