MySQL进阶_5.逻辑架构和SQL执行流程

news2024/11/29 4:44:32

文章目录

  • 第一节、逻辑架构剖析
    • 1.1、服务器处理客户端请求
    • 1.2、Connectors
    • 1.3、第1层:连接层
    • 1.4、第2层:服务层
    • 1.5、 第3层:引擎层
    • 1.6、 存储层
    • 1.7、小结
  • 第二节、SQL执行流程
    • 2.1、查询缓存
    • 2.2、解析器
    • 2.3、优化器
    • 2.4、执行器
  • 第三节、数据库缓冲池(buffer pool)

第一节、逻辑架构剖析

1.1、服务器处理客户端请求

不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(SQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。
在这里插入图片描述
在这里插入图片描述

上图的处理流程在MySQL5.7和8.0中有所不同,只是一个通用的处理流程,后续会有更详细的讲解。

1.2、Connectors

Connectors,指的是不同语言中与SQL的交互。MySQL首先是一个网络程序,在TCP之上定义了自己的应用层协议。所以要使用MySQL,我们可以编写代码,跟MySQL Server建立TCP连接,之后按照其定义好的协议进行交互。或者比较方便的办法是调用SDK,比如Native C API、JDBC、PHP等各语言MysQL Connector,或者通过ODBC。但通过SDK来访问MysQL,本质上还是在TCP连接上通过MySQL协议跟MySQL进行交互。

1.3、第1层:连接层

系统(客户端)访问MySQL 服务器前,做的第一件事就是建立TCP连接。
经过三次握手建立连接成功后,MySQL服务器对TCP传输过来的账号密码做身份认证、权限获取

1.4、第2层:服务层

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。
在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化︰如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。
如果是SELECT语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。

  • SQL Interface: SQL接口
    1.接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT … FROM就是调用SQLInterface。
    2.MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种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.从MySQL 5.7.20开始,不推荐使用查询缓存,并在 MySQL 8.0中删除

1.5、 第3层:引擎层

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

1.6、 存储层

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

1.7、小结

在这里插入图片描述

  1. 连接层:客户端和服务器端建立连接,客户端发送 SQL 至服务器端;
  2. SQL 层(服务层):对 SQL 语句进行查询处理;与数据库文件的存储方式无关;
  3. 存储引擎层:与数据库文件打交道,负责数据的存储和读取。

第二节、SQL执行流程

在这里插入图片描述

2.1、查询缓存

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

查询缓存是提前把查询结果缓存起来,这样下次不需要执行就可以直接拿到结果。需要说明的是,在MySQL 中的查询缓存,不是缓存查询计划,而是查询对应的结果。这就意味着查询匹配的 鲁棒性大大降低 ,只有 相同的查询操作才会命中查询缓存 。两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。因此 MySQL 的 查询缓存命中率不高

2.2、解析器

在解析器中对 SQL 语句进行语法分析语义分析。说白了就是看SQL语句的写法对不对,如果语法没问题,再看SQL语句的各个部分是做什么的。

2.3、优化器

在优化器中会确定 SQL 语句的执行路径,比如是根据 全表检索 ,还是根据 索引检索 等。经过上一步的解析器,MySQL就知道你要做什么了。在开始执行之前,还要先经过优化器的处理。一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划

比如:优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序,还有表达式简化、子查询转为连接、外连接转为内连接等。

2.4、执行器

在这里插入图片描述

SQL的执行流程在5.78.0中有所不同,后续如果有需要再进行详细学习。

第三节、数据库缓冲池(buffer pool)

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

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

相关文章

leetcode每日一题-周复盘

前言 该系列文章用于我对一周中leetcode每日一题or其他不会的题的复盘总结。 一方面用于自己加深印象,另一方面也希望能对读者的算法能力有所帮助。 该复盘对我来说比较容易的题我会复盘的比较粗糙,反之较为细致 解答语言:Golang 周一&a…

ICCV2023 Tracking paper汇总(一)(多目标跟随、单目标跟随等)

一、PVT: A Simple End-to-End Latency-Aware Visual Tracking Framework paper: https://openaccess.thecvf.com/content/ICCV2023/papers/Li_PVT_A_Simple_End-to-End_Latency-Aware_Visual_Tracking_Framework_ICCV_2023_paper.pdf github: https://…

c#如何把字符串中的指定字符删除

可以使用以下四种方法: 一、使用关键字:Replace public string Replace(char oldChar,char newChar); 在对象中寻找oldChar,如果寻找到,就用newChar将oldChar替换掉。 1、实例代码: 2、执行结果: 二、Rem…

centos7中多版本go安装

安装go的方式 官网下载tar.gz包安装 # 1.下载tar包 wget https://go.dev/dl/go1.18.1.linux-amd64.tar.gz # 2.解压tar包到指定路径 tar -xvf go1.18.1.linux-amd64.tar.gz -C /usr/local/go1.18 # 3.配置环境变量,打开 /etc/profile 文件添加以下文件每次开机时…

第六章:进制转换与数据存储

系列文章目录 文章目录 系列文章目录前言一、进制二、进制的转换三、原码、反码、补码总结 前言 进制转换是程序员的基本功。 一、进制 进制组成二进制0-1 ,满2进1以0b或0B开头十进制0-9 ,满10进1八进制0-7,满8进1以数字0开头表示十六进制0…

合肥中科深谷嵌入式项目实战——人工智能与机械臂(六)

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,订阅本专栏前必读关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明作者&#xff1…

电脑提示x3daudio1 7.dll丢失怎么修复,分享5个有效的修复方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“x3daudio1 7.dll丢失”。x3daudio1 7.dll是DirectX的一个组件,它负责处理音频输出和输入的相关功能。这个错误通常会导致软件无法启动,音频播放出现问题&#xff0c…

前端框架Vue学习 ——(七)Vue路由(Vue Router)

文章目录 Vue路由使用场景Vue Router 介绍Vue Router 使用 Vue路由使用场景 使用场景:如下图,点击部门管理的时候显示部门管理的组件,员工管理的时候显示员工管理的组件。 前端路由:指的是 URL 中的 hash(#号)与组件之间的对应关…

JAVA应用中线程池设置多少合适?

目录 1、机器配置: 2、核心线程数 3、最大线程数多少合适? 4、理论基础 5、测试验证 一个线程跑满一个核心的利用率 6个线程 12 个线程:所有核的cpu利用率都跑满 有io操作 6、计算公式 7、决定最大线程数的流程: 1、机器…

【CAN通信栈基础】针对CAN通信栈,浅谈操作系统中断和轮询之间的区别和优劣

1. 前言 在操作系统中(例如AUTOSAR OS),中断和轮询是处理需要快速行动的事件的两种方法。中断是通过向CPU发送立即采取行动的信号来通知CPU需要注意的事件,而轮询则是CPU不断检查设备状态以确定是否需要CPU的注意。本文将详细探讨CAN通信中断和轮询之间的差异和优劣。 2.…

【ES专题】ElasticSearch集群架构剖析

目录 前言阅读对象阅读导航前置知识笔记正文一、ES集群架构1.1 为什么要使用ES集群架构1.2 ES集群核心概念1.2.1 节点1.2.1.1 Master Node主节点的功能1.2.1.2 Data Node数据节点的功能1.2.1.3 Master Node主节点选举流程 1.2.2 分片1.3 搭建三节点ES集群1.3.1 ES集群搭建步骤1…

java高级之单元测试、反射

1、Junit测试工具 Test定义测试方法 1.被BeforeClass标记的方法,执行在所有方法之前 2.被AfterCalss标记的方法,执行在所有方法之后 3.被Before标记的方法,执行在每一个Test方法之前 4.被After标记的方法,执行在每一个Test方法之后 public …

Grōk :马斯克 xAI 打造的 ChatGPT 竞争产品探索

本心、输入输出、结果 文章目录 Grōk :马斯克 xAI 打造的 ChatGPT 竞争产品探索前言Grōk 名称的解释Grōk AI 目前被曝光了 11 项功能超长prompt(SuperPrompt)支持个性化设置快速响应庞大的知识库实时搜索API接口语音就绪图像生成图像识别音…

【蓝桥杯省赛真题43】Scratch神奇哈哈镜 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch神奇哈哈镜 一、题目要求 编程实现 二、案例分析 1、角色分析

OCI制作

1.制作OCI包并运行容器 容器镜像本质上就是一个根文件系统镜像。但容器镜像又不仅仅是一个根文件系统镜像,容器镜像有一个OCI标准规范,而runc命令用于运行根据OCI规范打包的应用程序,也就是说,runc命令是OCI规范的兼容实现。 OCI容…

shell script函数function篇

function fname(){ 程序段 } #这个比较熟悉了,和其他计算机语言定义函数的格式都是相同的,上案例,自定义printf函数 总结:函数定义的格式,和其他语言大同小异,不同的是在函数调用方面,c和java…

【GEE】4、 Google 地球引擎中的数据导入和导出

1简介 在本模块中,我们将讨论以下概念: 如何将您自己的数据集引入 GEE。如何将来自遥感数据的值与您自己的数据相关联。如何从 GEE 导出特征。 2背景 了解动物对环境的反应对于了解如何管理这些物种至关重要。虽然动物被迫做出选择以满足其基本需求&am…

机器学习---SVM目标函数求解,SMO算法

1. 线性可分支持向量机 1.1 定义输入数据 假设给定⼀个特征空间上的训练集为: 其中,(x , y )称为样本点。 x 为第i个实例(样本)。 y 为x 的标记: 当y 1时,x 为正例;当y −1时,x…

✔ ★【备战实习(面经+项目+算法)】 11.5学习

✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…