请说下你对 MYSQL 架构的了解?

Server层包括:

  • 连接器:负责和客户端建立连接,获取权限,管理连接
  • 查询缓存:在一个查询语句中,会先到缓存中查看之前是否查询过这条语句(如果开启了查询缓存功能):若存在则直接返回缓存的结果,优点是命中缓存时效率很高,缺点是缓存失效非常频繁,只要有对一个表的更新,该表所有的查询缓存都会被清空,MySQL 8.0 版本已删除了查询缓存功能
  • 分析器:对 SQL 语句进行词法分析和语法分析,判断语句是否合法
  • 优化器:对SQL语句进行优化,选择索引
  • 执行器:调用存储引擎接口,返回结果

存储引擎层负责:

  • 数据的存储和提取,其架构是插件式的,支持 InnoDB MyISAM 等多个存储引擎。从MySQL 5.5.5 版本开始默认的是 InnoDB,但是在建表时可以通过 engine = MyISAM 来指定存储引擎。不同存储引擎数据的存取方式不同,支持的功能也不同。
sql 复制代码
服务器层和存储引擎层
Server层:   
    首先要有一个客户端与MySQL服务器通过连接器建立起连接,在这里会有一个权限的管理(如:通过用户名,密码,端口 判断是否有权限),连接器在执行SQL语句之前就连接好了,
    其次,查询缓存(在MySQL 8.0 已经删除了)就是一个缓存,把我们所有的查询缓存下来,但是他有一个缺点只要你对数据库进行了更新,它的所有缓存都会失效,不会检查你的更新对缓存是否有影响,所以失效会非常频繁,只要有更新就会失效,所以在8.0之后就删除了,在8.0之前如果我们开启了查询缓存你查寻一条SQL语句他就会优先看一下,有没有命中缓存(有没有同样的一条SQL语句执行过)如果有就直接返回结果。就不用继续向下执行。优点是如果命中就会非常非常快,因为直接返回结果,不用执行下面的内容。
    再次,分析器,对我们写的SQL语句进行词法或语法的分析,符不符合MySQL的语法
    然后进入到,优化器对SQL语句进行优化,并不是我们写了什么SQL语句,他就会执行什么,比如 where条件写的合不合理他可能会构建一个新的语句去执行,包括创建语句一些默认值的补齐,它都会去给我们加上。还会看有没有用到索引,索引有没有失效然后去选择合适的索引去执行。
    最后,执行器,调用存储引擎的接口去通过存储引擎得到在存储引擎里存的这个数据然后把结果得到
    
存储引擎层:负责数据的存储和提取
    MySQL存储引擎默认用的是InnoDB,可以更换存储引擎,这种可以更换存储引擎的方式这种架构叫做插件式的
相关推荐
这个DBA有点耶11 小时前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
锋行天下12 小时前
我试图优化 Vite 的拆包,结果首屏慢了 10 倍
前端·vue.js·架构
掉头发的王富贵14 小时前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
小鼻子的猫18 小时前
独立开发 30 天:2.5 万行代码,23 个 Bug,5 次重构——一个 AI 社区的诞生
架构
咖啡八杯19 小时前
GoF设计模式——命令模式
java·设计模式·架构
SamDeepThinking19 小时前
一条UPDATE语句在MySQL 8.0中到底加了几把锁?
后端·mysql·程序员
candyTong20 小时前
阿里开源 AI Code Review 工具:ocr review 的执行链路解析
javascript·后端·架构
doiito1 天前
【Agent Harness】TPS的“自工程完结”教会了我一件事:别把Bug留给下一道工序
架构·rust
烬羽1 天前
中英文 token 数量差一倍?两段 JS 代码搞懂 LLM 底层是怎么"读"文字的
javascript·程序员·架构