MySQL基础之SQL的执行过程(基于查询讲解)与MySQL的逻辑架构


前言

本文是基于MySQL实战45讲的一篇笔记文
先给出执行草图
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、MySQL数据库的组成

大体上MySQL数据库可以划分为两部分组成,服务层和存储引擎,常用的存储引擎为innoDB和MYISAM.

而服务层又可以细分为连接器,缓存器和缓冲, 分析器,优化器,执行器.

二、SQL执行过程

1.连接器

连接方式我们知道,各种编程语言、远程连接本地连接的表现方式都不同,对于Java,提供了一个专门用于连接MySQL数据库的JDBC. 连接器当然也是外界接触到MySQL的第一层,类似于MVC架构中的controller层

由于连接过程相对复杂,因此推荐使用长连接的方式连接数据库, 然而长时间地连接数据库可能会造成内存增长过快的情况, 这是由于MySQL运行过程中临时使用的内存是管理在连接对象中的,如果内存过大可能会被系统杀死,造成MySQL异常重启

如何解决长时间连接造成的异常重启问题呢? 可以在连接一段时间后重新连接MySQL

2.查询缓存

首先需要说明的是查询缓存的命中率较低,原因在于如果对目标表做了更新操作,之前所有查询所留下的缓存均会被清空, 因此对于需要频繁更新数据的表来说是查询缓存的命中率会极低.

当然在8.0版本之后,查询缓存功能已被砍掉.

3.分析器

分析器主要用于词法分析与语法检查. 如果查询的字段不存在于该表中, 报错也是产生在该阶段的

4.优化器

优化器(optimizer)用于优化SQL语句中各部分执行的先后顺序, 或者是当存在多个索引时,决定使用哪一个索引.
当然, 优化器最后产生的优化结果并不一定就是我们想要的结果, 只是MySQL认为的最优解.

同时优化器也是可插拔的,在遇到极端需求时可以手写一个优化器.

5.执行器

执行器在执行SQL之前, 会对用户的权限进行判断, 如不具备查询权限,会返回无权限的错误

在做查询时,系统是对数据库表一行一行地进行查询,慢查询日志中的rows_examined字段用于记录查询到结果时,扫描了多少行记录


猜你喜欢

转载自blog.csdn.net/qq_45596525/article/details/114336281