你知道一条SQL语句在mysql中如何执行的吗?

数据库连接池

我们的系统中每个线程在每次访问数据库的时候,都基于MySQL驱动去创建一个数据库连接,然后执行SQL语句,然后执行完之后再销毁这个数据库连接。
大家觉得这样合理吗?
可能我们的系统中有成百个线程会并发的频繁创建数据库连接,执行SQL语句,然后频繁的销毁数据库连接,那效率肯定很低下。

所以一般我们会使用一个数据库连接池,也就是说在一个池子里维持多个数据库连接,让多个线程使用里面的不同的数据库连接去执行SQL语句,然后执行完SQL语句之后,不要销毁这个数据库连接,而是把连接放回连接池子中,后续还可以继续使用。

基于这样的一个数据库连接池的机制,就可以解决多个线程并发的使用多个数据库连接去执行SQL语句的问题,而且还避免了数据库连接使用完之后就销毁的问题。
在这里插入图片描述

MySQL架构设计

当我们的系统只要能从数据库连接池获取到一个数据库连接之后,我们就可以执行增删改查的SQL语句了,那么你知道执行流程吗?

SQL接口
MySQL内部的工作线程从一个网络连接中读取出来一个SQL语句之后,此时会把SQL语句给SQL接口,SQL接口专门用于执行我们发送给MySQL的那些增删改查的SQL语句
在这里插入图片描述
查询解析器
SQL接口拿到SQL后怎么执行呢?大家觉得他能看懂和理解这些SQL语句吗?其实是不行的,这时候就轮到查询解析器出场了。
查询解析器负责对SQL语句进行解析,所谓的SQL解析,就是按照既定的SQL语法,对我们按照SQL语法规则编写的SQL语句进行解析,进而理解SQL要做什么。
在这里插入图片描述
查询优化器
当MySQL通过解析器理解了SQL语句后,接着会找查询优化器来选择一个最优的查询路径。
查询优化器是MySQL针对用户的请求进行内部优化,生成执行计划并传输给存储引擎来操作数据,最终返回结果给用户的组件。

比如"SELECT id,name,age FROM student WHERE id=5" 这个sql,是先定位到id=5的这行数据然后把id,name,age这三个字段查出来还是将所有行的id,name,age这三个字段查出来再根据id=5来过滤呢?从结果上来看两个方式都可以做到,但是性能明显是第一种方式更高。

并且查询优化器还可以对特定的查询确定使用哪些索引、哪些关联算法、生成执行计划,从而使其高效运行。
在这里插入图片描述
执行器
那么生成了执行计划后交给谁呢?这时候就轮到执行器出场了,执行器会根据优化器选择的执行方案,按照一定的顺序和步骤去调用存储引擎的接口,从而执行sql语句的逻辑。
在这里插入图片描述
存储引擎
上面也提到了,执行器会调用底层的存储引擎去真正的执行SQL,他会按照一定的步骤去查询内存缓存数据,更新磁盘数据,查询磁盘数据等待一系列的操作。
在这里插入图片描述MySQL是支持各种各样的存储引擎的,比如我们常见的InnoDB、MyISAM、Memory等等,我们是可以选择使用哪种存储引擎来负责具体的SQL语句执行的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值