极客时间--MySQL实战45讲 (1)基础架构:一条SQL查询语句是如何执行的

前几天开始,有学极客时间的MySQL实战45讲;虽说音频配套文档,已算详尽,但总归也要做点笔记,也算学有所得;另外,以后学习的过程中,养成写博客的习惯也是很好的;就,由此作为个开端吧;废话不多说,开始第一篇!

第一讲,从一条最简单的查询语句说起,讲述MySQL是如何进行处理的,由此讲解MySQL的基础架构;
极客时间--MySQL实战45讲 (1)基础架构:一条SQL查询语句是如何执行的_第1张图片

MySQL 架构,分为Server层和存储引擎层。我们常说的InnoDB就是一种存储引擎,存储引擎负责数据的存储和提取,我把他理解为和硬盘打交道。另外需要说明下的是,存储引擎是以插件形式存在的;

而在server层,包括连接器、查询缓存、分析器、优化器、执行器等,其中查询缓存在较新的版本中已移除,暂且忽略;
连接器,顾名思义,负责客户端和数据库的连接,建立连接、获取权限、维护和管理连接就是在这里。当我们连接数据库之后,如果进行了一些修改权限的操作,比如给了当前用户更多的操作表的权限,这时要断开重新连接才会生效。因为,连接器在进行客户端和数据库的连接时,会进行查询,然后将对应的操作权限赋给当前登录用户,也就是说,在建立连接后,这个权限就是已经确定下来的。

分析器,就是对语句进行 “语法分析”,把select这些关键字识别出来,表名是啥,查询哪些列,等等。
像是这种说语法错误的就是在分析器做的处理;另外,列名表名不存在这样的问题,也是在分析器这里,文档里面的讨论区的解释就很值得一看。
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'elect * from t where ID=1' at line 1
经过分析器之后,就到了优化器。为了更好的执行效率,分析器会根据实际,决定索引的使用,各个表的连接顺序等等。

优化器经过优化,确定了执行方案,就到了执行器,执行器负责和存储引擎打交道。在进行查询前,还会先进行权限的验证。之后,调用引擎接口,(1)取表的第一行,符合条件则存到结果集中(2)取下一行,重复之前的判断逻辑,直至表的最后一行(3)将结果集返回给客户端。文档给的例子是最简单的一条查询语句select * from T where ID=10;在复杂度高的多的语句中,处理流程也差不多,应该会有些许不同,否则会进行全表扫描?(个人粗浅理解,忽略之);文档中有句话这么说:

在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟rows_examined并不是完全相同的。

这个补充大概可以这样理解吧;

附件是该节课程的文档。
链接:https://pan.baidu.com/s/1Ho3-irgs_esVKPKAnP3sXg
提取码:kqic

你可能感兴趣的:(极客时间--MySQL实战45讲 (1)基础架构:一条SQL查询语句是如何执行的)