查询sql是怎么执行的
select * from table
执行上面的这条sql,mysql是如何去执行的呢,我们先不去讲解执行的过程,先来介绍一下mysql的结构
存储引擎层主要负责的是数据的提取和存储。
接下来 我们来详细的介绍各个组价:
连接器
连接器负责与客户端建立连接,获取权限,维持和管理连接。
查询缓存
mysql进行查询的时候,会先查询缓存,如果有缓存则直接返回。
mysql会将查询到的数据已key-value的形式存在。key(sql),value(值)。
因为当更新表的时候,这个表上的查询缓存会被清空,所有不建议使用查询缓存
分析器
对sql语句进行解析,判断输入的sql语句是否满足mysql语法
优化器
优化器决定使用哪种索引,或者在一个语句中有多表关联的时候,决定各个表的连接顺序
执行器
select * from t where id = 2
先判断用户是否有操作该表的权限,没有提示没有权限
-
调用InnoDb引擎接口去这个表的第一行,判断id是不是2,如果不是跳过,是放在结果集中
-
引擎接口取 下一行, 重复相同的判断逻辑,直到取到这个表的最后一行。
-
执行器将上述遍历过程中,所有满足条件的行组成的记录集作为结果集返回给客户端。