Mysql快速学习——《一》: Mysql的基础架构

了解mysql的基础架构, 理解大概的实现思想, 更有利与我们知之所以然, 是我们学习mysql起来思路更清晰, 效率更高.

思维导图: mysql

基础架构

mysql基础架构.png
  • 1. 连接器
    Mysql作为服务器,一个客户端的Sql连接过来就需要分配一个线程进行处理,这个线程会专门负责监听请求并读取数据。
    这部分的线程和连接管理都是有一个连接器,专门负责跟客户端建立连接、权限认证、维持和管理连接。

  • 2. 解析器
    SQL解析,就是按照SQL语法,把我们编写的SQL语句进行词法分析,理解这个SQL需要做什么事情.

比如如下SQL语句,就会被解析器给拆成三步逻辑:

select name, age, birthday from user where userId = '007';
  • 查询user表;
  • 寻找到userId=007的那条数据;
  • 将数据中的name、age、country字段信息提取出来;
  • 3. 优化器
    MySQL的优化器主要是将SQL经过语法解析/词法解析后得到的语法树,通过MySQL的数据字典和统计信息的内容,经过一系列运算,从而得出一个执行计划树的构成。之后MySQL按照执行树的要求,计算得出结果。

优化器的输入是一个语法树,输出是一个执行树(也称为执行计划),SQL优化器的具体模块参考如下图:


mysql优化器.jpg
  • 准备阶段
    -- 名称识别:主要包括将找到并补全对应语句的表名,库名等;
    -- 语义检查:通过数据字典如果找不到对应的表名,则直接返回报错;
    -- 初级语义变换:主要是根据语义规则,把一些外连接直接转成内连接,子查询EXIST转成IN,然后IN再转成SEMIJOIN等功能。

  • 逻辑变换

    逻辑变换

    -- 否定消除:对于多个表达式的和取或析取范式前面有否定的情况,应将关系条件分解成一个一个的,将外面的NOT消除;
    -- 等值常量传递:利用了等值关系的传递特性,为了能够尽早执行下推运算(后面会讲到);
    -- 常量表达式计算:对于能够立刻计算出结果的表达式,直接计算结果,并将结果与其他条件尽量提前化简。

  • 代价优化准备
    基于代价的优化主要是用来确定对于每个表,根据条件是否应用索引应用哪个索引, 确定多表连接的顺序等问题。为了能够进行代价优化,需要尝试各种可能的方法,从而找到一个代价最小的方法。为了能够比较,就需要给定义一个量化指标。
    基于代价的优化,主要是为了确定采用如下哪一种方法(如果当前表存在该功能的条件下):
    -- 采用哪种索引: 一个表可能有主键,也可能有外键,需要根据条件确定使用哪个索引;
    -- 确定JOIN顺序:不同的JOIN顺序对性能影响极大;
    -- 确定子查询的执行策略: MySQL执行子查询有相当多的方式, 具体涉及到代价模型, 代价量化方法. 这里先埋个坑, 后续写个文章展开.

  • 4. 执行器
    这一步就是根据上一步骤优化器生成的SQL执行方案,去调用存储引擎的接口(InnoDB、mysam)完成SQL语句的执行计划,这个SQL引擎操作的有可能是内存数据,也有可能是磁盘文件。
    补充:MySQL 8.0 版本直接将查询缓存的整块功能删掉了,日常也不建议开启使用。
文章标签: #MYSQL基础架构 #MYSQL

(注:部分内容来源于网路和一些学习资料,并非本人原著)

最后编辑于:2025-02-24 21:41:30


喜欢的朋友记得点赞、收藏、关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31567.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Pytorch报错问题解决]AttributeError: ‘nn.Sequential‘ object has no attribute ‘append‘

问题 运行深度学习代码的时候遇到了以下报错问题: Traceback (most recent call last):File "/home/anaconda3/envs/Text2HOI/lib/python3.9/site-packages/torch/autograd/grad_mode.py", line 28, in decorate_contextreturn func(*args, **kwargs)Fi…

小支从学习到认证:NebulaGraph 图数据库认证之旅

前言 在数据爆炸的当下,图数据库凭借其独特的优势,成为处理复杂数据关系的有力工具。NebulaGraph 作为图数据库领域的佼佼者,以高性能、可扩展性和易用性赢得了广泛认可。对于想要在这一领域深入发展的专业人士来说,从学习到获得 …

windows:curl: (60) schannel: SEC_E_UNTRUSTED_ROOT (0x80090325)

目录 1. git update-git-for-windows 报错2. 解决方案2.1. 更新 CA 证书库2.2. 使用 SSH 连接(推荐)2.3 禁用 SSL 验证(不推荐)2.4 使用pull不使用update 1. git update-git-for-windows 报错 LenovoLAPTOP-EQKBL89E MINGW64 /d/…

mac使用Homebrew安装miniconda(mac搭建python环境),并在IDEA中集成miniconda环境

一、安装Homebrew mac安装brew 二、使用Homebrew安装miniconda brew search condabrew install miniconda安装完成后的截图: # 查看是否安装成功 brew list环境变量(无需手动配置) 先执行命令看能不能正常返回,如果不能正常…

2025人工智能AI新突破:PINN内嵌物理神经网络火了

最近在淘金的时候发现基于物理信息的神经网络(简称PINN)也是个研究热点,遂研读了几篇经典论文,深觉这也是个好发论文的方向,所以火速整理了一些个人认为很值得一读的PINN论文和同学们分享。 为了方面同学们更好地理解…

Android MVC、MVP、MVVM三种架构的介绍和使用。

写在前面:现在随便出去面试Android APP相关的工作,面试官基本上都会提问APP架构相关的问题,用Java、kotlin写APP的话,其实就三种架构MVC、MVP、MVVM,MVC和MVP高度相似,区别不大,MVVM则不同&…

大空间多人互动技术、大空间LBE、VR大空间什么意思?如何实现?

什么是VR? 虚拟现实(Virtual Reality,简称VR)是一种通过计算机技术模拟生成的三维虚拟环境,用户可以通过佩戴VR头显等设备,沉浸在这个虚拟世界中,并与其中的物体、场景进行互动。VR技术的核心在于提供身临…

3D匹配算法简述

一.什么是3D匹配 •形状、大小一致的源点云与目标点云之间的刚体变换。 •源点云通过平移与旋转操作变换到目标点云位置使之重合。 •源点云与目标点云坐标系之间的变换。 典型的应用流程为: 3D相机数据采集----点云生成----点云处理----目标点云提取----3D模板…

【今日EDA行业分析】2025年3月8日

今日行业分析:半导体行业技术博弈与国产 EDA 的突破与挑战 一、引言 在半导体行业的复杂生态系统中,EDA(电子设计自动化)技术处于核心地位,是连接芯片设计、制造与应用的关键纽带。当下,全球半导体领域正经…

NAT NAPT

NAT NAT(Network Address Translation,网络地址转换) 主要用于在不同网络(如私有网络和公共互联网)之间进行 IP 地址转换,解决IP 地址短缺问题,并提供一定的安全性。 IPv4 地址是 32 位&#xf…

固定表头、首列 —— uniapp、vue 项目

项目实地&#xff1a;也可以在 【微信小程序】搜索体验&#xff1a;xny.handbook 另一个体验项目&#xff1a;官网 一、效果展示 二、代码展示 &#xff08;1&#xff09;html 部分 <view class"table"><view class"tr"><view class&quo…

微服务——网关、网关登录校验、OpenFeign传递共享信息、Nacos共享配置以及热更新、动态路由

之前学习了Nacos&#xff0c;用于发现并注册、管理项目里所有的微服务&#xff0c;而OpenFeign简化微服务之间的通信&#xff0c;而为了使得前端可以使用微服务项目里的每一个微服务的接口&#xff0c;就应该将所有微服务的接口管理起来方便前端调用&#xff0c;所以有了网关。…

[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…

Android15请求动态申请存储权限完整示例

效果: 1.修改AndroidManifest.xml增加如下内容: <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-perm

深度学习系列79:Text2sql调研

参考 https://github.com/topics/text-to-sql 这里是一些资源&#xff1a;https://github.com/eosphoros-ai/Awesome-Text2SQL/blob/main/README.zh.md 这里是综述文章&#xff1a;https://zhuanlan.zhihu.com/p/647249972 1. 数据集 Spider: 一个跨域的复杂text2sql数据集&a…

Deepseek应用技巧-chatbox搭建前端问答

目标&#xff1a;书接上回&#xff0c;由于本地私有化部署了deepseek的大模型&#xff0c;那怎么能够投入生产呢&#xff0c;那就必须有一个前端的应用界面&#xff0c;好在已经有很多的前人已经帮我们把前段应用给搭建好了&#xff0c;我们使用就可以啦&#xff0c;今天我们就…

Bootstrap:图标库的安装及其使用

一、安装 使用npm包管理器安装。 npm i bootstrap-icons 二、使用图标 首先先引入bootstrap-icons.css库&#xff0c;然后从官方网站选择想要的图标然后复制使用代码。 示例代码&#xff1a;使用vue引入对应css文件后&#xff0c;使用库图标。 <script setup>import &qu…

Linux网络之数据链路层协议

目录 数据链路层 MAC地址与IP地址 数据帧 ARP协议 NAT技术 代理服务器 正向代理 反向代理 上期我们学习了网络层中的相关协议&#xff0c;为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址&#xff0c;从而指引了数据在网络中的一步…

TCP7680端口是什么服务

WAF上看到有好多tcp7680端口的访问信息 于是上网搜索了一下&#xff0c;确认TCP7680端口是Windows系统更新“传递优化”功能的服务端口&#xff0c;个人理解应该是Windows利用这个TCP7680端口&#xff0c;直接从内网已经具备更新包的主机上共享下载该升级包&#xff0c;无需从微…

“量子心灵AI“的监控仪表盘 - javascript网页设计案例

【前端实战】基于Three.js和Chart.js打造未来科技风AI监控仪表盘 本文通过AI辅助开发&#xff0c;详细记录了一个高级前端项目的完整实现过程。文章包含核心代码片段、技术要点及遇到的问题与解决方案。适合有一定前端基础的开发者学习参考。 1. 项目概述 本文详细介绍了一个名…