MySQL分层结构由哪些组成?

1、MySQL分层结构由哪些组成?

MySQL按照功能模块可以分为3层:连接层、服务层和存储引擎层。

在这里插入图片描述

连接层位于Server服务层的最外层,负责与客户端的直接交互,从功能上单独划分一层更合适。

不同的存储引擎在存储层有不同的实现,存储引擎层和存储层二者紧密相关,所以这里存储引擎层包含存储层。

2、连接层

连接层负责处理客户端与MySQL服务器之间的连接管理,包括连接管理、认证和授权。

连接管理: 当客户端连接到MySQL时,连接层会为每个连接分配一个线程。这个线程处理与该客户端的所有交互。

认证和授权: 通过用户名和密码验证客户端,并检查客户端的权限是否足够执行某些SQL操作。如果用户名或密码错误,会收到“Access denied for user”错误,客户端程序结束执行。如果验证通过,连接器会权限表查出用户名对应的权限,连接未断连之前,权限逻辑不会改变。

3、服务层

服务层主要包含MySQL的核心服务功能,如SQL解析、优化、执行,存储过程等。这个层次还包括内置的功能如视图、触发器和存储过程等。

3.1、查询缓存

查询缓存是 MySQL 的一个机制,缓存完整的查询结果。当一个相同的查询再次被提交时,如果缓存中有相应的结果,并且底层表的数据没有发生变化,就会直接返回缓存的结果,不需要再经过解析、优化和执行的过程。这样可以极大地提高查询效率,特别是在读取频繁且数据不经常变动的场景下。

缓存位置:查询缓存属于 MySQL Server 层的全局缓存,跟存储引擎无关,多个存储引擎共享同一个缓存。

缓存命中条件

  • 完整的 SQL 语句必须完全一致(包括大小写和空格),否则无法命中缓存。
  • 查询涉及的表在缓存时间内不能发生更新、插入或删除等变更操作,否则缓存会失效。

MySQL 在 5.7 版本后,已经废弃了查询缓存,原因是它对并发查询场景下的性能提升有限,甚至在某些高并发场景下会产生负面影响,锁定了整个缓存,使其成为性能瓶颈。实际使用场景可以使用其他缓存机制(如Redis)加速查询性能。

3.2、SQL解析器

对SQL语句做解析

第一步:词法分析,识别关键字、表名等,

第二步:语法分析,根据语法规则,判断SQL语句是否满足MySQL语法。

第三步:语法正确情况下,生成语法树

3.3、查询优化器

查询优化器负责决定SQL语句的执行计划。在执行之前,MySQL会根据可用的索引、表的统计信息、查询条件等进行优化。优化器的目标是找到执行代价最低的方案,例如选择合适的索引或表连接顺序。

查询重写:优化器有时会对查询进行重写,以简化查询或提高执行效率。

代价模型:优化器基于代价模型,估算不同执行计划的代价,并选择代价最低的执行计划。

3.3、查询执行器

执行之前先判断是否有权限,如果没有权限,返回没权限的错误;如果有权限,打开表继续执,根据表的引擎定义,使用引擎定义的接口。

4、存储引擎层

MySQL的存储引擎层是MySQL架构中最灵活的部分之一,不同的存储引擎负责数据的存储和提取。MySQL支持多种存储引擎,用户可以根据具体应用场景选择不同的存储引擎。

每个存储引擎都有自己的实现方式、数据结构和存储格式,但通过统一的API接口(称为存储引擎API)与上层进行交互。

常见的存储引擎包括:

  • InnoDB:MySQL默认的事务型存储引擎,支持ACID事务特性,行级锁和外键约束,并且支持多版本并发控制(MVCC)。
  • MyISAM:不支持事务和外键约束,适用于读多写少的应用场景,表级锁定。
  • Memory:将数据存储在内存中,适用于需要高速访问但数据量较小的场景。
  • NDB:分布式数据库引擎,主要用于高可用的集群环境。
5、总结

至此MySQL系列7篇已完结,前面六篇链接如下:

《Explain-MySQL分析和优化查询的核心工具》

《MySQL存储引擎InnoDB、索引和索引下推》

《MySQL事务原理和MVCC多版本并发控制》

《浅谈MySQL锁机制和锁优化小Tips》

《MySQL为什么会有redo log和binlog两份日志》

《MySQL其他四种日志:回滚、错误、通用查询和慢查询日志》

后续会继续分享JVM、Redis专题和其他Java系列的笔记,敬请关注。

6、我的公众号

敬请关注我的公众号:大象只为你,持续更新技术知识…

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

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

相关文章

Vue3入门--[vue/compiler-sfc] Unexpected token, expected “,“ (18:0)

新手小白学习Vue–入门就踩坑系列 问题描述 创建了一个Person.vue,保存后直接报错: [plugin:vite:vue] [vue/compiler-sfc] Unexpected token, expected "," (18:0) 在网上搜了半天也没找到原因,最后还得靠自己,现将解…

【宠粉赠书】大模型项目实战:多领域智能应用开发

在当今的人工智能与自然语言处理领域,大型语言模型(LLM)凭借其强大的生成与理解能力,正在广泛应用于多个实际场景中。《大模型项目实战:多领域智能应用开发》为大家提供了全面的应用技巧和案例,帮助开发者深…

java:入门基础(1)

练习一:文字版格斗游戏 需求: ​ 格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。 举例: ​ 程序运行之后…

Apache Paimon介绍

目录 背景 诞生 应用场景 实时数据分析与查询 流批一体处理 低成本高效存储 具体业务场景示例 总结 系统架构 存储层 元数据管理 计算层 数据摄入和输出 查询优化 扩展性和可靠性 生态系统集成 总结 核心概念 表(Table) 模式&#xf…

书生实战营第四期-第三关 Git+InternStudio

一、任务1: 破冰活动:自我介绍 1.fork项目到自己的账号下 2. 配置git并克隆项目到InternStudio本地 3.创建分支 4.创建自己的介绍文件 5.提交更改分支 6.推送分支到远程仓库 这里推送时会报错 问题解决:将密码换成access token 7.检查提交内容 分支…

【商汤科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

2-134 基于matlab的图像边缘检测

基于matlab的图像边缘检测,采用六种算子(分别是gabor、拉普拉斯、priwitt、robert、sobel、wallis微分算子),对图象进行边缘检测比较,输出边缘检测结果。可对比效果优劣。程序已调通,可直接运行。 下载源程序请点链接…

【计网】网络协议栈学习总结 --- 浏览器上输入网址域名后点击回车,到底发生了什么?

未来的路不会比过去更笔直,更平坦, 但是我并不恐惧, 我眼前还闪动着道路前方野百合和野蔷薇的影子。 --- 季羡林 《八十抒怀》--- 浏览器上输入URL后回车,到底发生了什么? 1 前言2 解析URL形成http请求3 DNS域名解…

ReactNative Fabric渲染器和组件(5)

ReactNative Fabric渲染器和组件 简述 Fabric是ReactNative中新架构最核心的模块,本章我们会来了解一下自定义一个Fabric组件,然后在JS文件中声明之后如何,是怎么映射到原生构建一个View的。 关于Fabric架构理念官网已经有说明了&#xff0…

推荐一款优秀的pdf编辑器:Ashampoo PDF Pro

Ashampoo PDF Pro是管理和编辑 PDF 文档的完整解决方案。程序拥有您创建、转换、编辑和保护文档所需的一切功能。根据需要可以创建特定大小的文档,跨设备可读,还可以保护文件。现在您还能像编辑Word文档一样编辑PDF! 软件特点 轻松处理文字 如 Microso…

开发流程初学者指南——需求分析

目录 从零开始理解需求分析什么是需求分析?需求分析的目标需求分析的基本原则需求分析的各个阶段需求分析的常用方法和工具编写需求文档总结 从零开始理解需求分析 需求分析是软件开发过程中不可或缺的一环,它帮助我们明确用户的需求,确保最…

Linux中Web服务器配置和管理(Apache)

文章目录 一、WEB服务器介绍1.1、WEB服务器概述1.2、WEB服务器的发展历史1.3、WEB服务器的优点与缺点1.4、WEB服务器的工作流程 二、Apache介绍2.1、Apache是什么2.2、Apache的发展史与应用场景2.3、Apache的特点2.4、Apache的工作原理2.5、Apache的模块 三、安装使用Apache服务…

在VS Code中操作MySQL数据库

【基础篇】 【小白专用24.5.26 已验证】VSCode下载和安装与配置PHP开发环境(详细版)_vscode php-CSDN博客 ~~~~~~~~~~~~~~~~~~~~~~~~~ 在VS Code中下载插件 Prettier SQL VSCode 和 MySQL : 随后在VS Code中点击Database图标 在连接界面输入MySQL数据库…

Unity可视化Shader工具ASE介绍——自定义函数

阿赵的Unity可视化Shader工具ASE介绍目录   大家好,我是阿赵。   之前介绍过一些ASE的用法,发现漏了一个比较重要的,自定义函数的使用。这里补充一下。 一、 使用的场合 在使用ASE制作Shader的过程中,可能会遇到以下这些情况…

聊聊我在新加坡的近况

我是 2022 年 4 月初过来新加坡的,然后两个月后就把老婆孩子们也接了过来。时至今日,已经两年半有余了。 22 年 8 月初的时候,写过一篇文章「聊聊我在新加坡的生活和工作体验」,没想到成了一篇热门文章,在知乎上不知不…

贪心算法入门(一)

1.什么是贪心算法? 贪心算法是一种解决问题的策略,它将复杂的问题分解为若干个步骤,并在每一步都选择当前最优的解决方案,最终希望能得到全局最优解。这种策略的核心在于“最优”二字,意味着我们追求的是以最少的时间和…

深度强化学习-学习笔记

1.PPO (1)DeepMind公司发明的算法PPO (2)OpenAI公司发明的算法PPO2; 近端策略优化算法(proximal policy optimization,PPO) Actor 网络输出在给定状态 S下采取每个动作的概率分布&a…

pytest脚本常用的执行命令

pytest脚本常用的执行命令 一、一般执行的脚本,执行.py文件整个脚本二、执行.py文件脚本中的一个模块三、执行脚本,执行.py文件整个脚本,或则一个模块,查看对应的日志信息3.1.py文件执行allure的脚本3.2去dos框下去执行对应的脚本…

【水果数据集】水果品种识别 人工智能 机器学习(含数据集)

一、背景意义 随着智能农业和食品管理系统的发展,准确识别不同水果种类变得尤为重要。水果种类数据集是针对水果识别与分类的深度学习项目而建立的重要资源。通过自动化的水果识别系统,农场主能够实时监控水果的种类和成熟度,从而优化采摘和销…

Android平台RTSP|RTMP播放器高效率如何回调YUV或RGB数据?

技术背景 我们在做Android平台RTSP、RTMP播放器的时候,经常遇到这样的技术诉求,开发者希望拿到播放器解码后的YUV或RGB数据,投递给视觉算法,做AI分析,本文以ffmpeg和大牛直播SDK的SmartPlayer为例,介绍下相…