一条SQL查询语句是如何进行执行的
MYSQL分为2层:存储引擎层和Server层。
- Server层
Server层包括连接器、查询缓存、分析器、优化器、执行器等服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 - 存储引擎层
数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个引擎存储。
1、连接器
第一步,先连接到数据库上,连接器:负责跟客户端建立连接、获取权限、维持和管理连接。
- 长连接
长连接是指连接成功后,客户端持续有请求,则一直使用同一个连接。占用内存会过多,在执行过程中临时使用的内存是管理在连接对象里面的,所以需要定期断开长连接或者执行mysql_reset_connection
来重新初始化连接资源。 - 短连接
短连接是指每次执行完很少的几次查询就断开连接,下次查询在重新建立一个。
空闲状态的命令查看,执行命令:show processlist
如果时间太长,连接器就会自动断开,可以设置参数定时间:wait_timeout=8
2、查询缓存
第二步,查询缓存:拿到一个查询请求,先到查询缓存看看。
3、分析器
第三步,没有命中查询缓存,开始执行语句。分析器开始词法分析和语法分析。
4、优化器
第四步,经过了分析器,到优化器。优化器在表里面有多个索引,决定使用哪个索引,或者多表关联的时候,决定各个表的连接顺序。
mysql> select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;
5、执行器
第五步,执行器,遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。
****************************MYSQL逻辑架构图***********************************************
image.png
网友评论