一。查询sql是怎么执行的

220 阅读2分钟

查询sql是怎么执行的

select * from table

执行上面的这条sql,mysql是如何去执行的呢,我们先不去讲解执行的过程,先来介绍一下mysql的结构

mysql可以分为server层与存储引擎层,server层包含了连接器,查询缓存,分析器,优化器,执行器,以及所有的内置的函数,跨存储引擎的功能比如,存储过程,触发器,视图等等。

存储引擎层主要负责的是数据的提取和存储。

接下来 我们来详细的介绍各个组价:

连接器

连接器负责与客户端建立连接,获取权限,维持和管理连接。

查询缓存

mysql进行查询的时候,会先查询缓存,如果有缓存则直接返回。
mysql会将查询到的数据已key-value的形式存在。key(sql),value(值)。
因为当更新表的时候,这个表上的查询缓存会被清空,所有不建议使用查询缓存

分析器

对sql语句进行解析,判断输入的sql语句是否满足mysql语法

优化器

优化器决定使用哪种索引,或者在一个语句中有多表关联的时候,决定各个表的连接顺序

执行器

select * from t where id = 2
先判断用户是否有操作该表的权限,没有提示没有权限
  • 调用InnoDb引擎接口去这个表的第一行,判断id是不是2,如果不是跳过,是放在结果集中

  • 引擎接口取 下一行, 重复相同的判断逻辑,直到取到这个表的最后一行。

  • 执行器将上述遍历过程中,所有满足条件的行组成的记录集作为结果集返回给客户端。