执行一条Select语句流程
查询缓存
这里的查询缓存是Server层的,不是存储引擎层的buffer pool,不过Server的缓存在mysql8之后被废弃了。
解析SQL
解析器会对sql进行词法分析、语法分析,构建语法树
如果sql语法不对,就会在次阶段报错,如果是字段不存在则在此阶段是不会发现的。
执行SQL
prepare阶段
预处理器会检查SQL查询语句的表或字段是否存在
optimize阶段
在优化阶段,优化器会为SQL指定执行计划,比如表中有多个索引,优化器会基于成本考虑选择使用哪个索引
execute阶段
执行器会和存储引擎交互