下图是 MySQL 的一个简要架构图,从下图可以清晰的看到 SQL 语句在 MySQL 内部是如何执行的。

先简单介绍下图涉及的一些组件的基本作用,后面还会详细介绍到这些组件的作用。

连接器: 身份认证和权限相关(登录 MySQL 的时候)

查询缓存: 执行查询语句的时候,会先查询缓存(MySQL8.0 版本后移除,因为这个功能不太实用)

分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了,就是要先看你的 SQL 语句是要干嘛,再检查你的 SQL 语句语法是否正确

优化器: 按照 MySQL 认为最优的方案去执行

执行器: 执行语句,然后从存储引擎返回数据

MySQL 简要架构图

简单来说, MySQL 主要分为 Server 层和存储引擎层:

Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。

存储引擎: 主要负责数据的存储和读取,采用可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储引擎,其中 InnoDB 引擎有自有的日志模块 redolog 模块。

现在最常用的存储引擎是 InnoDB,它从 MySQL5.5.5 版本开始就被当做默认存储引擎。

Server 层基本组件介绍

1) 连接器

连接器主要和身份认证和权限相关的功能相关,就好比一个级别很高的门卫一样。

主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作,如果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限,之后在这个连接里的权限逻辑判断都是会依赖此时读取到的权限数据,也就是说,后续只要这个连接不断开,即时管理员修改了该用户的权限,该用户也是不受影响的。

2) 查询缓存(MySQL8.0 版本后移除)

查询缓存主要用来缓存所执行的 SELECT 语句以及该语句的结果集。

连接建立后,执行查询语句的时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 的形式缓存在内存中,Key 是查询预计,Value 是结果集。如果缓存 key 被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。

MySQL 查询不建议使用缓存,因为查询缓存失效在实际业务场景中可能会非常频繁,假如你对一个表更新的话,这个表上的所有的查询缓存都会被清空。对于不经常更新的数据来说,使用缓存还是可以的。

所以,一般在大多数情况下都是不推荐去使用查询缓存的。

MySQL8.0 版本后删除了缓存的功能,官方也是认为该功能在实际的应用场景比较少,所以干脆直接删掉了。

3) 分析器

MySQL 没有命中缓存,那么就会进入分析器,分析器主要是用来分析 SQL 语句是来干嘛的,分析器也会分为几步:

第一步,词法分析,一条 SQL 语句有多个字符串组成,首先要提取关键字,比如 select,提出查询的表,提出字段名,提出查询条件等等。做完这些操作后,就会进入第二步。

第二步,语法分析,主要就是判断你输入的 sql 是否正确,是否符合 MySQL 的语法。

完成这 2 步之后,MySQL 就准备开始执行了,但是如何执行,怎么执行是最好的结果呢?这个时候就需要优化器上场了。

4) 优化器

优化器的作用就是以它认为最优的执行方案去执行(但有时候可能也不是最优的),比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等。

可以说,经过了优化器之后,这个语句具体该如何执行就已经定下来。

5) 执行器

当选择了执行方案后,MySQL 就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。

mysql知识点概览_MySQL 基本架构概览相关推荐

  1. mysql主从技术_MySQL主从架构的实现

    目录 一主一从 1.1 环境准备: 1.2 准备步骤: 1.3 实现步骤: 1.3.1 配置master主服务器 1.3.2 创建复制帐号 1.3.3 查看主服务器状态 1.3.4 配置slave从服 ...

  2. mysql case默认_MySQL数据库架构和同步复制流程

    在分布式系统里面,往往制约整个系统发展的瓶颈点就是数据库,所以数据库的架构和高可用以及数据库的切分都是我们值得花大力气去学习的. 首先我们来说说数据库的架构. 1.mysql主从架构,如图: 这种架构 ...

  3. flutter ios启动白屏_Flutter技术架构概览

    前言 最近在整理各种技术架构,给自己的列了个TODO list,希望能在几个月的时间内,研究完各种前端技术架构,包括移动端技术架构.今天分享一下自己整理的flutter技术架构.完整的技术架构TODO ...

  4. Apache Beam的架构概览

    不多说,直接上干货! Apache Beam是一个开源的数据处理编程库,由Google贡献给Apache的项目,前不久刚刚成为Apache TLP项目.它提供了一个高级的.统一的编程模型,允许我们通过 ...

  5. python前端用什么架构_Python web世界观——web架构概览(适合传统软件工程师)...

    Python web世界观--web架构概览(适合传统程序员) 传统web server面临的问题 我们知道传统的web server,一个进程打开socket,监听,来了请求生成新的进程(或线程.或 ...

  6. KubeFed 集群联邦的演进和架构概览

    KubeFed 集群联邦的演进和架构概览 Kubernetes 集群联邦 Kubernetes 从 1.8 版本起就声称单集群最多可支持 5000 个节点和 15 万个 Pod,我相信很少有公司会部署 ...

  7. pomelo架构概览

    pomelo架构概览 pomelo之所以简单易用.功能全面,并且具有高可扩展性.可伸缩性等特点,这与它的技术选型和方案设计是密不可分的.在研究大量游戏引擎设计思路基础上,结合以往游戏开发的经验,确定了 ...

  8. MySQL高可靠_MySQL高可用与高可靠架构

    前言 数据库高可用是生产环境使用数据库必要条件,MySQL数据库通常使用复制技术实现.然MySQL复制本身存在很多的"坑"容易被忽视,导致一些开发或运维人员对于MySQL复制的可靠 ...

  9. mysql 一致性读_mysql/mariadb知识点总结(27):一致性读,快照读

    在本博客中,"mysql"是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表. mys ...

最新文章

  1. 算法(第四版)C# 习题题解——1.3
  2. html漂浮广告随页面移动代码,JS漂浮广告代码,慢慢漂移的广告JS代码
  3. Network 【TCP/IP 四层模型】
  4. 保研计算机辅助翻译,本科2013级推免生寄语
  5. 【转】Vue.js入门教程(二)在页面中引入vue的方式
  6. 内联函数及4种显示转化
  7. Halcon 学习总结——制作标定板(函数gen_caltab)
  8. 【渝粤教育】电大中专职业应用写作 (2)_1作业 题库
  9. 遇到的问题:uboot下,关闭串口前需要printf打印一个“UART BUS OFF!!!”提示信息,但是打印不出来
  10. 网络层-IP地址和MAC地址
  11. ddos是攻击服务器还是网站,服务器遭到DDoS攻击选高防IP还是CDN?
  12. Python读写矢量数据(1)针对读取矢量数据——Python地理数据处理学习分享
  13. Springboot中Feign的使用方法
  14. linux分屏显示命令文件夹,Linux简易命令整理
  15. android 仿飞猪日历,vue 日期选择 类似飞猪
  16. 互联网名称与数字地址分配机构ICANN简介
  17. 道路交通标志设计要素和基本原则
  18. SUSE Linux配置xmanager5
  19. Vue项目的打包\部署\优化
  20. 评估酒店营销效果的12个重要KPI指标

热门文章

  1. 使用Math 类 和 Random类 两种方式生成 20 到30之间的随机整数---java基础
  2. leetcode 215. Kth Largest Element in an Array | 215. 数组中的第K个最大元素(Java)
  3. 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析
  4. MIPS指令以及数据通路
  5. 牛客网_PAT乙级_1016程序运行时间(15)
  6. netty系列之:使用netty搭建websocket客户端
  7. Python基础之:Python中的模块
  8. 新知客:现代“买椟还珠”故事
  9. 【手把手教学】基于Maven构建方式使用Mybatis generator自动生成
  10. 【简便解法】1077 互评成绩计算 (20分)_32行代码AC