MySQL体系结构及执行过程

news2024/12/27 11:46:57

一、MySQL体系结构

 1、网络连接层

客户端连接器(Client Cnnectors):提供支持与MySQL服务器建立连接。

建立连接命令:mysql -h -u -p
-h指定MySQL服务的IP 若本地连接则不需要

每一个连接均会保存用户权限,中途修改权限没用。只有再新建的连接才会使用新的权限。

查看已连接MySQL的客户端具体信息:
show processlist

MySQL与HTTP一样分为短连接与长连接:

// 短连接   
连接 mysql 服务(TCP 三次握手)
执行sql
断开 mysql 服务(TCP 四次挥手)

&缺点:需要频繁建立连接和断开连接

// 长连接 
连接 mysql 服务(TCP 三次握手)
执行sql
执行sql
执行sql
....
断开 mysql 服务(TCP 四次挥手)

&缺点:长时间占用内存资源

2、服务层(MySQL Server)

服务层执行过程:sql语句通过sql接口,服务器如果缓存cache有命中查询结果,直接读取数据。如果没有命中查询结果,由解析器进行sql语句的解析,预处理,经过优化器进行优化后提交给引擎层。通俗地说—>服务层告诉引擎层要做什么。

类比CPU先访问Cache,命中直接返回数据,不命中再访问主存。

连接池(Connection Pool)

存储和管理客户端与数据库的连接(再连接时-快),一个线程负责管理一个连接。

系统管理和控制工具(MS&U)

例如备份恢复、安全管理、集群管理等。

SQL接口(SQL Interface)

用于接收客户端发送的各种SQL命令,并且返回用户需要查询的结果。比如DML、DDL、存储过程、视图、触发器等。

解析器(Parser)

负责将请求的SQL解析生成一个"解析树"。然后根据MySQL规则进一步检查解析树是否合法。

        *词法分析。MySQL 会根据你输入的字符串识别出关键字出来,构建出 SQL 语法树,这样方便后面模块获取 SQL 类型、表名、字段名、 where 条件等等。

        *语法分析。根据词法分析的结果,语法解析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法。

查询优化器(Optimizer)

当“解析树”通过解析器语法检查后,将交由优化器将其转化成执行计划,然后与存储引擎交互。

此处已经是执行阶段:

  • 预处理阶段:预处理器  检查SQL语句中表、字段是否存在;将*替换为所有列)
  • 优化阶段:查询优化器  确定SQL语句查询方案。(如确定使用什么索引)
  • 执行阶段:执行器 与存储引擎交互。有三种方式:

                主键索引查询

                全表扫描

                索引下推

缓存(Cache&Buffer)

缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,权限缓存,引擎缓存等。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。

3、存储引擎层

存储引擎层与底层系统文件交互,真正负责MySQL中数据存储与读取。如今默认innoDB。           记住MyISAM、innoDB、MEMORY三个就好了。

4、系统文件层

将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互

二、SQL语句执行过程

 

  • 连接器:建立连接,管理连接、校验用户身份;
  • 查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;
  • 解析 SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型;
  • 执行 SQL:执行 SQL 共有三个阶段:
    • 预处理阶段:检查表或字段是否存在;将 select * 中的 * 符号扩展为表上的所有列。
    • 优化阶段:基于查询成本的考虑, 选择查询成本最小的执行计划;
    • 执行阶段:根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端;

SQL的详细执行流程:数据库通常不会被单独使用,而是由其它编程语言通过SQL支持接口调用MySQL。由MySQL处理并返回执行结果。首先,其它编程语言通过SQL支持接口调用MySQL,MySQL收到请求后,会将该请求暂时放在连接池,并由管理服务与工具进行管理。当该请求从等待队列进入到处理队列时,管理器会将该请求传给SQL接口,SQL接口接收到请求后,它会将请求进行hash处理并与缓存中的数据进行对比,如果匹配则通过缓存直接返回处理结果;

否则,去文件系统查询:由SQL接口传给后面的解析器,解析器会判断SQL语句是否正确,若正确则将其转化为数据结构。解析器处理完毕后,便将处理后的请求传给优化器控制器,它会产生多种执行计划,最终数据库会选择最优的方案去执行。确定最优执行计划后,SQL语句交由存储引擎处理,存储引擎将会到文件系统中取得相应的数据,并原路返回。

对于更新比较频繁的表,查询缓存的命中率很低的,MySQL8.0后就不查询缓存了。                     这里说的查询缓存是 server 层的,也就是 MySQL 8.0 版本移除的是 server 层的查询缓存,并不是 Innodb 存储引擎中的 buffer pool。

简化版:连接器处理连接 -> SQL接口接收SQL语句 -> 解析器解析SQL语句 ->

预处理器预处理 -> 查询优化器优化 -> 执行与存储引擎交互

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于在虚拟机CentOS7的Docker下安装Oracle

这不三阶段了,要上Oracle了,感觉这个班卷的程度到位。二阶段我就上了ElementUI和MyBatis,项目也是用这些技术写的,整体钻研程度还行。于是布置了两个任务:在windows下安一下Oracle,在windows下安装Oracle那…

从零开始制作CPU

文章目录 简介门与门或门非门异或门 ALU加法半加器全加器8位加法器 减法补码8位补码器8位减法器 存储锁存器8位锁存器带边沿触发的锁存器 内存内存单元16位内存 CPUPC程序计数器CPU连接 自制乘法器移位8位乘法器 自制除法器比较一位比较8位比较 8位除法器 简介 黑马最近出了个…

BOOTMGR丢失无法开机怎么办?

BOOTMGR(引导管理器,Boot Manager的简称)其实是一个引导操作系统的程序,通常位于系统保留分区或系统分区中。如果系统分区或系统保留分区的根目录中的BOOTMGR存在错误,那么系统将会在计算机启动时提示找不到操作系统。…

一文读懂ChatGPT,ChatGPT百科全书

引言 ChatGPT是什么? ChatGPT是一款先进的自然语言处理(NLP)模型,由OpenAI开发和维护。它基于OpenAI的第四代生成预训练Transformer(GPT-4)架构,旨在通过深度学习技术理解和生成人类语言。ChatG…

大一统真的来了:多模态共享参数的 Meta-Transformer

出品人:Towhee 技术团队 作者:张晨 在探索通用人工智能的多种可能发展方向中,多模态大模型(MLLM)已成为当前备受关注的重要方向。随着 GPT-4 对图文理解的冲击,更多模态的理解成为了学术界的热点话题&#…

优思学院|PDCA循环与精益管理有何相通之处?

PDCA是精益管理和六西格玛管理的基础原则,通常PDCA可以转化为六西格玛的DMAIC,变成一套以数据驱动方式为主来减少过程变异的改善方法,也可以应用于精益管理的原则上,处理优化价值流和减少浪费的改进上。 PDCA循环原则 这是由美国…

centos下安装ftp-读取目录列表失败-

1.下载安装ftp服务器端和客户端 #1.安装yum -y install vsftpdyum -y install ftp #2.修改配置文件vim /etc/vsftpd.conflocal_enablesYESwrite_enableYESanonymous_enableYESanon_mkdir_write_enableYES //允许匿名用户在FTP上创建目录anon_upload_enableYES //允许匿名用户…

【ElementUI组件封装】搭建架子、按钮自行封装、封装element的表格、表单

通过原生 button 封装类 el-button 组件封装 el-form 相关表单通用组件封装 el-table 相关表格通用组件 Vite Vue3 ElementPlus业务组件封装 数字化管理平台 Vue3ViteVueRouterPiniaAxiosElementPlus 个人博客地址 开发环境:Vite3 Vue3 兼容性:Vite…

前端企业微信开发内嵌H5记录 右边侧边栏开发

企业微信内嵌H5(侧边栏)开发流程 1、如果要想在企业微信和客户聊天的过程中出现右侧侧边栏,需要添加非本企业的人员微信,右边侧边栏就会自动出现(可折叠)。 示例: 2、创建一个自建应用 a.先登…

VMware horizon 8 建立手动桌面池

准备一台win10的虚拟机,改静态IP,计算机名,加入域,把Agent软件上传到机器中。 2:右键管理员身份安装程序。 一般默认 根据自己实际情况选择 启用桌面远程功能 安装完成 安装完成以后创建一个快照,以后是好知道机…

申请美国J1签证所需材料清单

在申请前往美国进行交流学习、文化交流或实习等项目的J1签证时,申请人需要准备一系列必要的材料。这些材料将有助于确保申请的顺利进行,以下是J1签证材料清单的详细内容: 1. 签证申请表格: 首先,申请人需要填写并签署D…

多网点多品牌精密空调集中监控方案

精密机房空调主要应用于通信数据机房、交换机 房、IDC机房、精密医疗设备室、外科手术室、实验室、精密电子仪器仪表生产车间等环境,这样的环境对空气的温度、湿度、洁净度、气流分布等各项指标有很高的要求,必须由每年365天、每天24小时安全可靠运行的专用机房精密…

DoIP学习笔记系列:导航篇

文章目录 1. 前言2. 导航3. 参考资料 1. 前言 DoIP学习笔记系列是一整套基于网络的诊断协议学习笔记,非常适合对有UDS基础但对DoIP没有实战经验的小伙伴参考,通过源协议讲解,企标讲解,测试需求讲解,测试用例讲解&…

使用 Apache DolphinScheduler 进行 EMR 任务调度

By AWS Team 前言 随着企业规模的扩大,业务数据的激增,我们会使用 Hadoop/Spark 框架来处理大量数据的 ETL/聚合分析作业,⽽这些作业将需要由统一的作业调度平台去定时调度。 在 Amazon EMR 中,可以使用 AWS 提供 Step Functio…

Flutter系列文章-Flutter进阶

在前两篇文章中,我们已经了解了Flutter的基础知识,包括Flutter的设计理念、框架结构、Widget系统、基础Widgets以及布局。在本文中,我们将进一步探讨Flutter的高级主题,包括处理用户交互、创建动画、访问网络数据等等。为了更好地…

黄东旭:The Future of Database,掀开 TiDB Serverless 的引擎盖

在 PingCAP 用户峰会 2023 上, PingCAP 联合创始人兼 CTO 黄东旭 分享了“The Future of Database”为主题的演讲, 介绍了 TiDB Serverless 作为未来一代数据库的核心设计理念。黄东旭 通过分享个人经历和示例,强调了数据库的服务化而非服务化…

【C 程序设计】第 1 章:C 语言简介与思维导图

目录 一、C 语言思维导图 (1)数据类型 (2)运算 (3)控制结构 (4)过程式,模块化程序设计 (5)输入输出 (6)编码规…

AntDB数据库与东方通TongWeb完成兼容互认,共筑数字化底座核心能力

近日,湖南亚信安慧科技有限公司(简称:亚信安慧)与北京东方通科技股份有限公司(简称:东方通)完成AntDB数据库与东方通应用服务器TongWeb V7.0的兼容互认。经测试,AntDB数据库能与东方…

C++入门之stl六大组件--Vector库函数的介绍,以及模拟实现一些常用接口

文章目录 前言 一、vector的介绍和使用 1.vector的介绍 2.vector的使用 2.1vector的定义 ​编辑 2.2vector iterator的使用 2.3vector空间增长问题 2.4vector增删查改 2.5vector迭代器失效问题 会引起迭代器失效的操作有: 二、模拟实现一些vector常用接口…

四、运算符(2)

本章概要 关系运算符 测试对象等价 逻辑运算符 短路 字面值常量 下划线指数计数法 位运算符 关系运算符 关系运算符会通过产生一个布尔(boolean)结果来表示操作数之间的关系。如果关系为真,则结果为 true,如果关系为假&#xf…