【MySQL】逻辑架构

逻辑架构

  • 逻辑架构剖析
    • 服务器处理客户端请求
    • 连接层
    • 服务层
      • SQL Interface : SQL接口
      • Parser : 解析器
      • Optimizer : 查询优化器
      • Caches&Buffers : 查询缓存组件
    • 引擎层
    • 存储层
  • SQL执行流程
    • MySQL查询流程
      • 查询缓存
      • 解析器
        • 词法分析
        • 语法分析
      • 优化器
      • 执行器
  • 数据库缓冲池

逻辑架构剖析

服务器处理客户端请求

在这里插入图片描述
在这里插入图片描述

连接层

客户端访问MySQL服务器前,做的第一件事就是建立TCP连接

经过三次握手和服务器建立连接成功后,MySQL服务器对TCP传输过来的账号密码做身份验证,权限获取

TCP连接收到请求后,必须要分配一个线程专门与这个客户端的交互,所以还会有个线程池,去继续后面的流程,每一个链接从线程池中获取线程,省去了创建和销毁线程的开销

服务层

SQL Interface : SQL接口

接受用户的sql命令,并且返回用户需要查询的结果

Parser : 解析器

  1. 在解析器对sql语句进行语法分析,语义分析,将sql语句分解成数据结构,并将这个结构传递到后续步骤,以后的sql语句的传递和处理就是基于这个结构的,如果在分解构成中遇到错误,就说明这个sql语句是不合理的
  2. 在sql命令传递到解析器是会被解析器验证和解析,并为其创建语法树,并且根据数据字典丰富查询语法树,会验证该客户端是否与有执行该查询的权限,创建好语法树后,MySQL还会对sql查询进行语法上的优化,进行查询重写

Optimizer : 查询优化器

  1. SQL语句在语法解析之后、查询之前会使用查询优化器确定 SQL 语句的执行路径,生成一个执行计划 。
  2. 这个执行计划表明应该 使用哪些索引 进行查询(全表检索还是使用索引检索),表之间的连接顺序如何,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户。

Caches&Buffers : 查询缓存组件

  1. MySQL内部维持着一些Cache和Buffer,比如Query Cache用来缓存一条SELECT语句的执行结果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、优化和执行的整个过程了,直接将结果反馈给客户端。

  2. 这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等 。

  3. 这个查询缓存可以在 不同客户端之间共享 。

引擎层

插件式存储引擎层( Storage Engines),真正的负责了MySQL中数据的存储和提取,对物理服务器级别维护的底层数据执行操作,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。

MySQL 8.0.25默认支持的存储引擎如下:
在这里插入图片描述

存储层

所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在 文件系统 上,以 文件 的方式存在的,并完成与存储引擎的交互。当然有些存储引擎比如InnoDB,也支持不使用文件系统直接管理裸设备,但现代文件系统的实现使得这样做没有必要了。在文件系统之下,可以使用本地磁盘,可以使用DAS、NAS、SAN等各种存储系统。

SQL执行流程

在这里插入图片描述

MySQL查询流程

查询缓存

**Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。**需要说明的是,因为查询缓存往往效率不高,所以在 MySQL8.0 之后就抛弃了这个功能

解析器

在解析器中对 SQL 语句进行语法分析、语义分析。

词法分析

分析器先做“ 词法分析 ”。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。 MySQL 从你输入的"select"这个关键字识别出来,这是一个查询语句。它也要把字符串“T”识别成“表名 T”,把字符串“ID”识别成“列 ID”。

语法分析

接着,要做“ 语法分析 ”。根据词法分析的结果,语法分析器(比如:Bison)会根据语法规则,判断你输入的这个 SQL 语句是否 满足 MySQL 语法 。

如果SQL语句正确,则会生成一个这样的语法树:
在这里插入图片描述

优化器

在优化器中会确定 SQL 语句的执行路径,比如是根据 全表检索 ,还是根据 索引检索 等。

在查询优化器中,可以分为 逻辑查询 优化阶段和 物理查询 优化阶段。

执行器

截止到现在,还没有真正去读写真实的表,仅仅只是产出了一个执行计划。于是就进入了 执行器阶段 。

在执行之前需要判断该用户是否 具备权限 。如果没有,就会返回权限错误。如果具备权限,就执行 SQL查询并返回结果。在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。

数据库缓冲池

它是数据库管理系统(DBMS)中的一个组件,用于缓存数据页并提供高速访问。

数据库缓冲池的主要目的是减少与磁盘的IO操作次数,通过将热门数据页保留在内存中,加快对这些页的读取和写入速度。当应用程序需要访问数据库中的数据时,首先会检查缓冲池中是否存在相应的数据页,如果存在则直接从内存中读取,避免了频繁的磁盘IO操作,提高了数据库的响应性能。

在innoDB 存储引擎中,有一部分数据会放到内存中,缓冲池则占了这部分内存的大部分,它用来存储各种数据的缓存
在这里插入图片描述

缓冲池管理器会尽量将经常使用的数据保存起来,在数据库进行页面读操作的时候,首先会判断该页面是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再进行读取。

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

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

相关文章

S4.2.4.3 Electrical Idle Sequence(EIOS)

一 本章节主讲知识点 1.1 EIOS的具体码型 1.2 EIOS的识别规则 1.3 EIEOS的具体码型 二 本章节原文翻译 当某种状态下,发送器想要进入电器空闲状态的时候,发送器必须发送EIOSQ,也既是:电器Electrical Idle Odered Set Sequenc…

【智慧工地源码】基于AI视觉技术赋能智慧工地

伴随着技术的不断发展,信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升,智慧工地概念应运而生,庞大的建设规模催生着智慧工地的探索和研发。 建筑施工具有周期长、环境复杂、工序繁杂、人员流动性大等特点,所以…

【Java】<泛型>,在编译阶段约束操作的数据结构,并进行检查。

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ JAVA泛型 泛型介绍: ①泛型&#…

如何在Potplayer中使用公网访问群晖WebDav?

文章目录 1 使用环境要求:2 配置webdav3 测试局域网使用potplayer访问webdav4 内网穿透,映射至公网5 使用固定地址在potplayer访问webdav ​ 国内流媒体平台的内容让人一言难尽,就算是购买了国外的优秀作品,也总是在关键剧情上删删…

使用Dockerfile生成docker镜像和容器的方法记录

一、相关介绍 Docker 是一个开源的容器化平台,其中的主要概念是容器和镜像。 容器是 Docker 的运行实例。 它是一个独立并可执行的软件包,包含了应用程序及其依赖的所有组件(如代码、运行时环境、系统工具、库文件等)。容器可以在…

网络协议--Traceroute程序

8.1 引言 由Van Jacobson编写的Traceroute程序是一个能更深入探索TCP/IP协议的方便可用的工具。尽管不能保证从源端发往目的端的两份连续的IP数据报具有相同的路由,但是大多数情况下是这样的。Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过…

【网络协议】聊聊ICMP与ping是如何测试网络联通性

ICMP协议格式 ping是基于iCMP协议工作的,ICMP全称Internet Control Message Protocol,就是互联网控制报文协议。其实就是有点类似于古代行军打仗,哨探进行前方探明具体情况。 IMCP本身处于网络层,将报文封装在IP包里,…

云原生Docker数据管理

目录 Docker的数据管理 数据卷 数据卷容器 容器互联 容器中管理数据主要有两种方式: 数据卷(Data Volumes)数据卷容器(Data Volume Dontainers) Docker的数据管理 数据卷 数据卷是一个供容器使用的特殊目录&a…

视频编辑不求人,教你一招制胜批量添加封面

视频添加封面是一个相当简单的任务,您只需要一款专门的软件,就能轻松搞定!下面就是详细教程啦! 首先,您需要在浏览器中搜索“固乔智剪软件”,进入官网并下载这款软件。固乔智剪软件是一款非常专业的视频剪辑…

免费领取!TikTok Shop “全托管”黑五大促官方备战指南来啦!

黑五网一大促即将来袭,自“全托管”模式上线以来,TikTok for Business在沙特阿拉伯和英国市场开展了古尔邦节大促、夏季大促、返校季大促等活动,今年更是会借着黑五网一大促之际,首次覆盖美国市场,为全托管商家带来全球…

账号合租平台源码Thinkphp6.1|内置详细搭建教程

小白账号合租平台说明 系统采用的是常见的租号平台模式,现在网络上流出的这种类型的源码还很少 平台介绍 1.租号模式,用户可自行选择单独租号或采用合租的模式。 2.支付,采用易支付通用接口 3.邀请返利,为了站长能更好推广推荐了邀请返利功能 4.用户提现功能 5.工单…

laravel框架介绍(一)

laravel框架是一套简洁,优雅的PHPWeb开发框架。

2023IG新功能大整理,更多玩法助力营销推广

作为当今全球最为受欢迎的社交媒体之一,Instagram在2023年迎来了一系列重要的功能更新。学习了解Instagram的最新功能,以及如何高效利用这些新的功能和工具,对于跨境品牌在该平台上实现营销推广至关重要。今天给大家详细介绍 Instagram在2023…

Godot 官方2D C#重构(2):弹幕躲避

前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 实现效果 技术点说明 异步函数 Godot的事件不能在Task中运行,因为会导致跨线程的问题。 //这样是不行的,因为跨线程了,而且会阻塞UI线程,具体原因…

开关电源检测的技术标准和安全标准是什么?纳米软件为您介绍

开关电源总体技术标准 1. 外观:元器件排列整齐、美观、结构合理,焊点均匀饱满、明亮、光滑、无尖刺,焊接牢固。PCB板铜条无脱落、外露、无毛刺、飞边、变形。 2. 输入电压:110VAC/DC或220VAC/DC或380VAC三相20%;或85~264VAC全范围…

银行卡二要素API:支付交易的必备工具,保障支付安全

引言 随着数字支付的普及,支付交易的安全性成为了金融领域的一项关键挑战。在这个背景下,银行卡二要素API崭露头角,成为了一种不可或缺的工具,用于确保支付交易的安全性。本文将深入探讨银行卡二要素API是如何成为支付交易的必备…

SpringMVC - 详解RESTful

文章目录 1. 简介2. RESTful的实现3.HiddenHttpMethodFilter4. RESTful案例1、准备工作2、功能清单3、具体功能:访问首页a>配置view-controllerb>创建页面 4、具体功能:查询所有员工数据a>控制器方法b>创建employee_list.html 5、具体功能&a…

1024 CSDN 程序员节-知存科技-基于存内计算芯片开发板验证语音识别

前言 在今年的 CSDN 程序员节上,我参与了这次知存科技举办的一个 AI Workshop 小活动——“基于存内计算芯片开发板验证语音识别”,并且有幸成为完成任务的学习者之一XD。上一次参与类似的活动是算能公司举办的“千校万里行”AIGC 大模型编译部署活动&a…

关于Mysql中的索引与事务

索引 定义 索引:为了提高查找效率而使用的一种数据结构把数据组织起来,可以把索引理解在书的目录或字典的检索表(拼音检索) 索引是一种特殊的文件,可以包含着对数据表里的所有记录的引用指针,对表中的一…

layui框架实战案例(21):layui table单元格显示图片导致复选框冗余的解决方案

图片自适应表格CSS 为防止单元格内的图片不能正常显示,需本地重写CSS。 /*layui-table图片自适应*/ .layui-table-cell {height: auto;line-height: 20px;}.layui-table-cell img {height: 50%;max-width: 50%; }列代码 , cols: [[{type: checkbox,fixed:left, w…