MySQL-逻辑架构

news2025/2/26 18:18:04

MySQL-逻辑架构

1.逻辑架构剖析

1.1服务器处理客户端请求

MySQL属于典型的C/S架构,客户端进程发送请求,服务端进程处理请求。处理的基本流程如下。

在这里插入图片描述

MySQL的逻辑架构如下:

在这里插入图片描述

Connectors:与服务端程序连接的程序。

Manager Services & Utilties:基础服务组件;

Connection Pool:提供多个客户端和服务端交互的线程并进行管理;

SQL Interface:接收SQL指令,返回查询结果;

Parser:语法分析,语义分析,生成语法树;

Optimizer:核心组件,对SQL进行优化;

Caches & Buffers:查询缓存,以键值对方式缓存查询结果;

Pluggable Storage Engines:存储和组织数据的方式;

File System :文件系统;

查询数据的流程:

Connectors-> Connection Pool ->SQL Interface->Cache & Buffers->Parser->Optimizer->Pluggable Storage Engines->File System-> Cache & Buffers -> SQL Interface

1.2连接层

访问MySQL服务前,首先需要建立TCP连接,并对客户端传输的账号密码进行身份认证、权限获取。

  1. 用户名或密码错误:拒绝连接数据库。
  2. 认证通过,根据权限表查询用户权限,后面的权限判断逻辑,都依赖于该查询结果。

MySQL服务器可以和多个客户端进行连接,为了避免无限制创建TCP连接将系统资源消耗尽。MySQL中提供TCP连接池限制连接数。采用长连接的方式复用TCP连接。

TCP收到请求后,需要线程对请求进行处理,因此还需要有线程池,执行后续流程。

1.3服务层

提供了大部分核心服务功能,并完成缓存的查询,该层会将SQL语句解析查询并创建相应的内部解析树,并进行优化。

1.4引擎层

负责对数据的存储和提取,MySQL服务器通过API与引擎进行通信并查询结果。

在这里插入图片描述

不同的存储引擎实现的功能不同,可以根据具体的需求,选择存储引擎。

2.SQL的执行流程

在这里插入图片描述

2.1查询缓存

如果在查询缓存中发现一条和当前查询完全相同的SQL语句,就会将结果直接返回给客户端;如果没有则进入解析器阶段。但是查询缓存效率往往不高,因此在MySQL之后抛弃了该功能。

 -- 查询是否开启缓存
 show global  variables like '%query_cache_type%';
-- 0(OFF):关闭查询缓存 1:开启缓存(ON)  2:按需使用(DEMAND)
SET GLOBAL query_cache_type=1;
-- 显示指定使用查询缓存
SELECT SQL_CACHE * FROM t1 where id = 1;
-- 查看缓存的状态
SHOW STATUS LIKE '%Qcache%';

2.2解析器

分析器先做“词法分析”,MySQL需要识别里面的字符串分别是什么,代表什么(什么是关键字、列名、表名等)。然后做词法分析,根据词法分析的结果,语法分析器会根据语法规则,判断输入的SQL语句是否满足语法要求,如果检查出语句不对,会返回"You hava an error in your SQL syntax"的错误提醒。

2.3优化器

一条语句查询可以有很多种执行方式,返回的结果都相同,但是时间不一定相同,因此优化器会对SQL进行优化,在优化器中会确定SQL语句的执行路径,比如是根据全表索引,还是根据索引检索等。

物理查询优化:通过索引和表连接方式等技术来进行优化。

逻辑查询优化:通过SQL等价变换提升查询效率。

2.4执行器

执行之前需要判断用户是否具备权限,如果没有,则返回权限错误。如果具备权限,就执行SQL查询并返回结果。如果设置了查询缓存,还会将查询结果进行缓存。

2.5预处理器

当我们频繁执行SQL时,可能一些SQL语句长的都很相似。例如下面两条SQL语句。

SELECT * FROM user WHERE id = 1;
SELECT * FROM user WHERE id = 2;

如果每一次都要对这种类似的语句进行解析会比较浪费时间,因此可以采用预编译的方式将会发送动态变化的值用占位符进行代替,将SQL语句模板化,通常称这类语句叫Prepared Statements。

-- 创建预处理SQL语句,名字可以自定义
prepare select_product from 'select * from product where id = ?';
-- 设置一个变量
set @id = 1;
-- 执行预处理SQL语句
 execute select_product using @id;
-- 根据名字删除预处理语句
drop prepare select _product;

2.6MySQL的执行原理

MySQL中的profiling参数,标记了当前是否开启记录SQL语句的执行信息。

select @@profiling;
-- 0代表OFF,1代表ON
set profiling = 1;
-- 查看已经执行的SQL语句情况
show profiles;
-- 查看指定行的sql语句执行情况
show profile for query 序号;

可以通过查询SQL语句的执行情况,检查SQL语句的性能如何。

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

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

相关文章

Unity之ShaderGraph如何实现卡通效果

前言 今天我们来实现一下最常见的卡通效果。 效果如下: 关键节点 Remap:基于输入 In 值在输入In Min Max的 x 和 y 分量之间的线性插值,返回输入Out Min Max的 x 和 y 分量之间的值。 SampleGradient:在给定Time输入的情况下…

论坛介绍 | COSCon'23 云计算(C)

众多开源爱好者翘首期盼的开源盛会:第八届中国开源年会(COSCon23)将于10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是:“开源:川流不息、山海相映”!各位新老朋友们,欢迎到成都&am…

信息系统项目管理师第四版学习笔记——组织通用管理

组织通用管理是项目管理的关键前提和基础,它为项目管理提供思想路线和基本原则与方法,项目管理则是通用管理方法在特定场景下的具体表现。 人力资源管理 人力资源管理基础 人力资源管理的广义目标是充分利用组织中的人员使组织的各项工作效率水平达到…

竞赛选题 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度,召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

互联网Java工程师面试题·Java 总结篇·第七弹

目录 68、Java 中如何实现序列化,有什么意义? 69、Java 中有几种类型的流? 70、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。 71、如何用 Java 代码列出一个目录下所有的文件&a…

chatglm2微调—Lora

1.使用ChatGLM-Efficient-Tuning框架 官网下载https://github.com/hiyouga/ChatGLM-Efficient-Tuning 或者国内镜像https://gitee.com/mirrors/chatglm-efficient-tuning 推荐一些写的不错的链接以及官网readme ChatGLM2-6B微调 - 掘金 (juejin.cn) 基于 PEFT 的高效 Chat…

78.C++ STL set/multiset容器

目录 1.什么是set和multiset 2.set和multiset的区别: 3.树的简单知识: 4.构造函数和赋值函数 5.set大小和交换 6.set插入和删除 7.set查找和统计 1.什么是set和multiset set 和 multiset 是 C 标准库中的关联容器,底层结构是用二叉树实…

算法专题:双指针

目录 题目1:移动零 题目2:复写零 题目3:快乐数 题目4:最多水的容器 题目5:有效三角形的个数 题目6:两数之和为s 题目1:移动零 给定一个数组nums,编写一个函数将所有的0移动到数…

java学生通讯录管理系统

设计要求 本课程设计,涉及输入输出、GUI设计、数据库操作等本课程重要概念和编程技能,全面巩固和加深学生对java程序设计的相关概念的理解,全面强化java编程技能,培养学生综合运用所学知识和技能分析问题和解决问题的能力。培养学…

消息队列-链表动态申请

一、链表的介绍 链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。 C语言消息队列链表是一种使用链表实现的队列模块,可以用于在程序中实现消息队列的功能。C语言消息队列链表是一种自定义的数据结构&…

热门影视APP系统源码 可二开 后端+app+搭建教程

影视APP源码绿豆二开版 后端app搭建教程都在压缩包里,搭建步骤和绿豆一样 安装宝塔 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 安装环境 Nginx 1.20.2 MySQL5.6-5.7 php7.0-7.…

C++特性——引用与指针详解

文章目录 引用1. 引用的作用1.1 引用可以做函数参数:1.2 引用做函数返回值: 2 常引用3 引用和指针3.1 引用和指针在语法层面和底层的异同3.1 引用和指针的不同 引用 简单来说,引用就是给一个变量起一个别名。例如: int a 1; in…

【数之道 05】走进神经网络模型、机器学习的世界

神经网络 神经网络(ANN)神经网络基础激活函数 神经网络如何通过训练提高预测准确度逆向参数调整法 (BackPropagation)梯度下降法链式法则增加一层 b站视频连接 神经网络(ANN) 最简单的例子,视…

解锁机器人技术的钥匙—《应用机器人学:运动学、动力学与控制技术》

随着科技的飞速发展,机器人已经广泛应用于各个领域,成为了当今世界的热门话题。作为一个工程师,如果你想在机器人行业大显身手,深入了解机器人运动学、动力学和控制技术是必不可少的。而《应用机器人学:运动学、动力学…

ERROR 1366 (HY000): Incorrect string value,mysql插入数据报错?安排

1.报错 mysql57,windows环境,插入中文数据报错 ERROR 1366 (HY000): Incorrect string value: \xC0\xEE\xCB\xC4 for column nm at row 1 2.测试语句 创建一个数据库,创建表,插入中文数据报错 1366 --创建数据库 CREATE DATABASE…

【每日一题】同积元组

文章目录 Tag题目来源题目解读解题思路方法一:哈希表组合 其他语言python3 写在最后 Tag 【哈希表组合】【数组】【2023-10-19】 题目来源 1726. 同积元组 题目解读 在一个由不同正整数组成的数组中找出满足 a * b c * d 的四元组 (a, b, c, d),返回…

macOS查端口占用进程

java开发人员,端口冲突的问题基本都遇到过吧!以下的日志是否熟悉: *************************** APPLICATION FAILED TO START ***************************Description:The Tomcat connector configured to listen on port 8084 failed to …

Spring Security过滤器链分析-初始化流程(8)

过滤器链分析 提起Spring Security的实现原理,很多读者都会想到过滤器链。因为Spring Security中的所有功能都是通过过滤器来实现的,这些过滤器组成一个完整的过滤器链。那么,这些过滤器 链是如何初始化的?我们前面反复提到的Aut…

【YOLO】拾遗(五)

0 YOLO系列笔记 【YOLO】朴实无华的yolov5环境配置(一) 【YOLO】yolov5训练自己的数据集(二) 【YOLO】目标识别模型的导出和opencv部署(三) 【YOLO】语义分割和实例分割(四) 1 …

Android-NDK-clang 编译 FFmpeg

Android-NDK-clang 编译 FFmpeg Android-NDK-clang 编译 FFmpeg Android-NDK-clang 编译 FFmpeg - 知乎 (zhihu.com) 前期准备 下载 Android-NDK下载 FFmpeg 源码 注意:笔者用的是 NDK-21 和 ffmpeg-4.4 进行编译,如果版本不同可能会有所不同。 测试&a…