MySQL语句的执行过程(待更新)
概述
- 客户端一般会使用长连接连接到数据库服务器,当执行SQL语句时
- 先通过连接器进行权限校验,校验通过则会查询缓存(MySQL 8已移除缓存),缓存的数据结构为key-value,key为SQL语句,value为SQL语句执行结果;如果命中缓存则直接返回结果,否则进入分析器
- 分析器会先进行词法分析,确认关键字,表名,字段名,再进行语法分析,判断是否为合法的SQL语句;如果表或字段不存在,或者SQL不合法则抛出异常,正常则进入优化器
- 优化器会根据情况为当前查询选择最优的执行方案(不过有时候会选择错索引,可以通过force index来强制指定索引)
- 当确定最终执行方案时,执行器会指定具体的操作;例如查询语句:
5.1.调用存储引擎接口取要查询表的第一行,判断条件是否满足,如果满足则将这行存入结果集中,如果不满足则跳过;
5.2. 调用存储引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行
5.3. 执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端
有索引的表,思路类似,获取“下一行”是返回索引的下一行