体系结构
1)连接器
2)查询缓存
3)分析器
4)优化器
- 多个索引,选择哪个索引
- join的顺序
5)执行器
- 调用存储引擎接口获取满足条件的第一行记录;
- 调用存储引擎接口获取满足条件的下一行记录;
6)存储引擎
索引下推
假设现子表T有字段(id,a,b,c),id是主键,(a,b)是联合索引,SQL 语句是select * fromwhere a like ‘99%’ and b='d'
,优化器选择了联合索引(a,b)进行查询,但也只能用到a列。如果没有MySQL5.6的索引下推,那么InnoDB不会处理b字段,可能会返回b!='d’的数据给执行器。如果有了索引下推,那么InnoDB只会返回b=‘d’的数据给执行器。又因为select * 是查询所有列要回表查询,那么执行器就会根据返回数据的id去主键索引查询一整行数据,但其实是没必要的,因为b列已经不符合where条件。