当前位置: 首页 > news >正文

Mysql架构理论部分

Mysql架构是什么?实际可以理解为执行一条sql语句所要经历的阶段有哪些!

1.连接层

(1)客户端发起连接
   客户端通过TCP/IP、Unix Socket或命名管道等方式向Mysql服务器发起链接请求

 想要了解tcp与udp的区别,可以参考这篇文章
https://blog.csdn.net/ymb615ymb/article/details/123449588?ops_request_misc=%257B%2522request%255Fid%2522%253A%252293c621ab4e488bbc0967bd9f87bd4418%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=93c621ab4e488bbc0967bd9f87bd4418&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-123449588-null-null.142^v102^pc_search_result_base7&utm_term=tcp%E4%B8%8Eudp%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187

(2)服务端接受链接

  当mysql服务器接收到客户端发来的请求后,服务器会建立一个线程或者连接句柄来处理客户端      的请求

  大致来讲,如果把mysql服务器当做一个进程的话,那么与每个客户端建立的链接则可以当做一个线程

(3)身份验证
  连接层会验证客户端提供的用户名和密码
  验证通过后,连接层会检查客户端是否有权限访问指定的数据库
  如果验证失败,连接层会拒绝链接并返回错误信息

(4)处理客户端请求
  客户端发送sql查询或者其他请求
  连接层将请求传递给查询解释器和优化器(解释器和优化器在后面会讲到)进行处理
  查询执行完成后,连接层将结果返回给客户端

 (5)关闭链接

2.缓存层

 缓存层是mysql中比较鸡肋的部分....


 与其他应用中的缓存器一样,mysql缓存层目的是为了减少数据库负载(即多次查询相同的数据库内容),提高反应速度


  但是mysql是通过sql语句来记录是否执行缓存层的,什么意思?


 如我想查询学生表中的所有信息,理论上   select * from students 与  select * from         students查询的结果是一样的,但是两个语句之间空格数量一样,缓存层就会认为这是不同的语句,无法发挥缓存的作用


  所以mysql5.6/5.7版本中存在缓存层,但是默认是关闭的,而mysql.8.0则是直接去掉了缓存部分,用相应的业务层来做缓存

3.解释层

(1)解析sql语句
        解析sql语句会用到解析器组件(如第三方解析器组件Druid)
        解析sql语句步骤:
        客户端将sql语句传到mysql服务器->解析该sql语句 词法和语法解析(关键字、条件、判断表和字段是否存在)->生成解析树

      

 (2)交给优化层


4.优化层


    要想从北京去往上海是有多条路径的但是哪个是最优路径呢,那就得交给优化层了

1)对于整个sql进行优化 优化器会对sql的条件进行调整 生成各种执行计划
 (2)对sql进行具体优化 去掉没必要的条件 EXPLAIN SELECT * FROM USER WHERE 1=1; SELECT*FROM USER;
   (3)优化器会选择合适的索引 但优化器不是万能的并不能全部优化成功 需要人工干预 慢查询就是例子

 


5.执行器与存储引擎

  存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取。MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的。每一种存储引擎都有它的优势和劣势。
可以使用 show engines; 命令来查看当前数据库所支持的所有的存储引擎。


 

举例:
有的时候可能需要查询速度快,不需要持久化,基于内存的操作,那么可以使用memory引擎。
有的数据是历史数据,基本上不会新增及其查询,提供压缩的功能就可以使用archive引擎。
有的时候需要非常多的 读写,并发,数据一致性的操作,可以使用innodb引擎

相关文章:

  • github代理 | 快速clone项目
  • 简单理解机器学习中top_k、top_p、temperature三个参数的作用
  • 前端开发:Vue以及Vue的路由
  • AsyncHttpClient使用说明书
  • Android Compose 切换按钮深度剖析:从源码到实践(六)
  • SpringBoot @Scheduled注解详解
  • SQL宏-代替UDF
  • JSONPath 的介绍
  • 搭建主从DNS、nfs、nginx
  • 【MySQL】undo日志页结构
  • 智能遥感新质生产力暨DeepSeek、Python、OpenCV驱动的空天地数据识别与计算及15个行业标杆案例
  • linux 之 查看进程运行时长
  • C# SerialPort 使用详解
  • Linux中修改文件的权限用什么命令?
  • 前端项目完结--上线打包发布步骤和方法
  • MySQL 中,查看执行频次、慢查询日志、SHOW PROFILE和 EXPLAIN性能分析和优化
  • 可视化图解算法:删除链表中倒数第n个节点
  • 在 Linux 系统中,路径(Path)用于定位文件或目录的位置。路径分为两种类型:相对路径和绝对路径。它们的核心区别在于路径的起点不同
  • 枚举的定义及其使用
  • 《齿轮咬合水分子:Relax Max如何用潜艇科技重构卫浴动力系统》​
  • 美政府以拨款为要挟胁迫各州服从移民政策,20个州联合起诉
  • 体坛联播|C罗儿子完成国家队首秀,德约结束与穆雷合作
  • 俄副外长:俄美两国将举行双边谈判
  • 第十届影像上海博览会落幕后,留给中国摄影收藏的三个问题
  • 中国人民抗日战争暨世界反法西斯战争胜利80周年纪念活动标识发布
  • 澎湃思想周报|欧洲胜利日之思;教育监控与学生隐私权争议