一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。
引擎提供接口获取数据,服务层判断值是否相等💡
打开表,调用存储引擎接口获取数据(存储引擎提供一些接口,比如获取接口等,服务层来判断值是否相等)。索引下推,减少回表与sever层交互开销,
比如select * from T where ID=10;
无索引(全表扫描)
- 调用引擎接口取”T表第一行”接口,如果ID = 10, 数据保存在结果集中
- 调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行
- 执行器将结果集返回给客户端
有索引 - 调用“取满足条件的第一行”接口,如果ID = 10, 数据保存在结果集中
- 调用引擎接口取”满足条件的下一行”,重复相同的判断逻辑,直到取到这个表的最后一行
- 执行器将结果集返回给客户端.