欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL 笔记整理(1) --基础架构,一条SQL查询语句如何执行

程序员文章站 2022-04-03 17:51:52
最近在学习林晓斌(丁奇)老师的《MySQL实战45讲》,受益匪浅,做一些笔记整理一下,帮助学习。如果有小伙伴感兴趣的话推荐原版课程,很不错。 1) --基础架构,一条SQL查询语句如何执行 MySQL大体来说可以分为Server层和存储引擎层两部分. Server层包括:连接器,查询缓存,分析器,优 ......

  最近在学习林晓斌(丁奇)老师的《mysql实战45讲》,受益匪浅,做一些笔记整理一下,帮助学习。如果有小伙伴感兴趣的话推荐原版课程,很不错。

1) --基础架构,一条sql查询语句如何执行

  1. mysql大体来说可以分为server层存储引擎层两部分.

    server层包括:连接器,查询缓存,分析器,优化器,执行器等,涵盖mysql的大多数核心服务功能,以及所有的内置函数(如日期,时间,数学和加密函数等),所有跨存储引擎的功能在这一层实现,比如实现存储过程,触发器,视图等。

    存储引擎层:负责数据的存储和提取,其架构模式是插件式的,支持如innodb,myisam,memory等多个存储引擎,现在最常用的存储引擎是innodb,它从mysql5.5.5版本开始成为了默认存储引擎。

  2. 不同的存储引擎共用一个server层。
  3. 连接器:连接器负责跟客户端建立连接,获取权限,维持和管理连接。(另:如果连接器认证通过,会到权限表里查出连接者的权限,之后这个连接里的操作权限都依赖于查出权限。也就是说如果admin修改了某个用户的权限,只有当该用户重新建立连接才会生效。)
  4. 查询缓存:mysql拿到一个查询请求后,会先去查询缓存中查看是否之前执行过这个条语句,如果可以找到就将结果直接返回。否则mysql就进行后面的执行阶段。(mysql8.0版直接将查询缓存功能删掉了。即使是之前的版本,也不建议使用查询缓存,因为其失效的很快。)
  5. 分析器:分析器会先做“词法分析”,即从你输入的"select"这个关键字识别出来这是一个查询语句,把你输入的字符串“id”识别成“列id”。之后会进行“语法分析”,判断你输入的sql语句是否满足语法规则。
  6. 优化器:优化器是在表里有多个索引的时候,决定使用哪个索引;或者在一个语句有多个关联(join)的时候,决定各个表的连接顺序(因此如果你要指定顺序的话应在sql中显示指明。)
  7. 执行器:执行器会先判断你对要操作的表有没有权限,如果有就继续执行。打开表的时候,执行器会根据表的引擎定义,去使用这个引擎提供的接口。

 

这个系列中每篇末尾都会有课后题,答案在下一讲中公布。因此笔者决定保留这种形式。

课后题:

如果表t中没有字段k,而去执行这个语句 select * from t where k = 1,那么会报错“unknown column ‘k’ in ‘where clause’”。请问这个错误是在哪个阶段报出的?

 

后记:

  本来以为自己已经差不多弄懂了这一讲的东西,直到动手写笔记才意识有很多细节忽略了。坚持下去更新,尽快赶上我听课的进度。