一条SQL查询语句是如何执行的?&&阅读笔记

阅读完文章后,自己的一些小记录。原文

Mysql基本架构图

MySQL的逻辑架构图
MySQL大体上可分为Server层存储引擎层

Server层包括:

  • 连接器
  • 查询缓存
  • 分析器
  • 优化器
  • 执行器
  • 其他内置函数如日期、时间、数学和加密函数等

所有跨存储引擎的功能都在这一层实现,如存储过程、触发器、视图等

存储引擎层负责数据的存储和提取,插件式架构模式,支持InnoDB、MyISAM、Memory等多个存储引擎。默认是MyISAM,从MySQL 5.5.5版本InnoDB开始成为了默认存储引擎。

连接器

连接到数据库的第一道关卡,负责跟客户端建立连接、获取权限、维持和管理连接。
建立连接的过程比较复杂,尽量减少建立连接动作,使用长连接
但是如果大量长连接累积下来,可能导致内存占用太大,导致MySQL异常重启。
解决方案:

  • 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。
  • 如果是MySQL 5.7或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

查询缓存

每当拿到一个请求,会先到缓存里面去看看,之前是不是执行过,之前执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。

如果命中,就返回结果;如果没有,就接着走下面的流程。

但是实际上缓存十分鸡肋,我们现实的业务肯定是改>读,每当数据变动,缓存就会失效,需要重新获取,如果改的频繁,缓存都还没用,直接被做掉了,那还不如别用。缓存还是适用于读频繁比较香。

所以,MySQL 8.0版本直接将查询缓存的整块功能做掉了。

分析器

分析器首先会做词法分析,MySQL需要识别你SQL语句每个“单词”代表什么,识别完之后,就进行语法分析,判断语句是否满足MySQL语法

优化器

优化器主要是MySQL来选择其认为最优的执行方案,比如如何去选择索引。该步骤后,如何去执行该语句就定下来了。

执行器

开始执行时,会先判断”你“是否拥有这张表相应的权限。
有权限的话,执行器就会根据表的引擎定义,去使用这个引擎提供的接口,返回接口执行的结果。

猜你喜欢

转载自blog.csdn.net/weixin_44233929/article/details/106665973