#<-- 该文章借鉴林晓斌老师mysql实战45讲 ->
一条SQL查询语句是如何执行的?
-
mysql 的基础架构示意图如下所示:
-
客户端----->服务层------->存储层
服务层包括连接器,查询缓存,分析器,优化器,执行器,以及所有的内置函数存储引擎则负责数据的存储和提取,存储引擎又分myisam, innodb等等, 所有种类的存储引擎共用同一个服务层mysql5.55后默认存储引擎为innodb -
连接器分为长连接和短连接,由于连接过程比较复杂,建议尽量使用长连接,同时使用长连接后,数据库所占用的内存会持续增加很可能导致mysql异常重启,所以需要定期断开长连接,或者监听执行占用较大内存的查询,查询后断开连接进行重连
-
不建议开启查询缓存,因为任何一个表的更新操作都会清空该表相关的所有缓存,效率极低,除非针对的是静态表或者更新操作极小的表,在mysql8后就不存在查询缓存此功能了
-
分析器对sql进行语法分析,判断sql是否存在语法错误,sql中的表和相关字段是否存在等
-
优化器是对执行方案进行选择,选择一个最优的方案,例如选择哪个索引等等
-
执行器在判断是否具有相应的操作权限后,就开始调用存储引擎的相关接口执行sql语句,在扫描数据过程中将满足条件的数据放入缓存集合然后统一返回给客户端