总的来说就是C/S架构,脑手分离,先说Server层:

当走到执行器这一步服务层并不会实际执行,而是通过一套统一接口来调用存储引擎层,存储引擎只关心数据的读写
引擎层是插件化设计,可以调整使用不同的存储引擎,默认是InnoDb:

详细图:

优化器每次选的索引都是正确的吗?

一条SQL的执行顺序
我们一般书写的顺序是:SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT。但是执行顺序是这样的:
FROM -> ON -> JOIN -> WHERE -> GROUP BY -> WITH ROLLUP -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT
注意:这是逻辑顺序,不是物理执行顺序。优化器可能重排执行计划
举一个例子来说明,参考: