MySQL的基本架构

article/2025/8/29 17:33:36

1. MySQL基本架构

1.1. MySQL架构

MySQL 可以分为 Server 层存储引擎层两部分。

1. Server 层(上层)

作用:处理所有的通用功能,与存储引擎无关。

包含模块

  • 连接器(Connection):负责建立连接、用户认证和权限验证。
  • 查询缓存(8.0已废弃):历史上用来缓存查询结果,现在建议通过应用层缓存替代。
  • 分析器(Parser):进行语法和词法分析,把 SQL 转换成解析树(Parse Tree)。
  • 优化器(Optimizer):根据多种执行策略选择最优的执行计划。
  • 执行器(Executor):按照优化器生成的执行计划逐步执行 SQL。

涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

2. 存储引擎层(下层)

作用:负责数据的存储和提取。

常用引擎

  • InnoDB(默认):支持事务、行级锁和崩溃恢复。
  • MyISAM:支持表级锁,不支持事务,已较少使用。
  • Memory

不同的存储引擎共用一个Server 层,也就是从连接器到执行器的部分。

对比项

InnoDB

MyISAM

事务支持

✅ 支持事务(ACID)

❌ 不支持事务

锁机制

行级锁(高并发性能好)

表级锁(并发性能差)

崩溃恢复能力

✅ 支持崩溃恢复

❌ 恢复能力差,易损坏

外键支持

✅ 支持外键

❌ 不支持外键

全文索引

5.6+ 开始支持

✅ 支持

数据存储方式

聚集索引(数据和索引在一起)

非聚集索引(数据和索引分开)

空间使用

相对较大

相对较小

读取性能

读写均衡性能较好

读性能较好,写性能差

表损坏概率

默认引擎

是(MySQL 5.5+ 默认)

支持 MVCC

✅ 支持多版本并发控制(MVCC)

❌ 不支持

适合场景

高并发事务处理,数据一致性要求高

以读为主,事务和一致性要求不高

MySQL 常见存储引擎对比:

存储引擎

是否支持事务

是否支持外键

是否支持全文索引

索引类型

特点和用途

InnoDB

✅ 支持

✅ 支持

✅(5.6+)

B+树、聚簇索引

默认引擎,支持事务、崩溃恢复、高并发。适用于大多数业务。

MyISAM

❌ 不支持

❌ 不支持

B+树

存储快,读写分离场景优,但不支持事务,容易数据损坏。

Memory

❌ 不支持

❌ 不支持

哈希表为主

数据存储在内存中,读写极快,重启即丢失。适用于临时计算。

CSV

❌ 不支持

❌ 不支持

无索引

每张表一个 CSV 文件,适合导入导出。几乎不用。

Archive

❌ 不支持

❌ 不支持

无索引

仅支持插入和查询,压缩率高,适合归档历史数据。

Federated

❌ 不支持

❌ 不支持

无索引

表连接远程 MySQL 实例,不存本地数据。

NDB (Cluster)

✅ 支持

✅ 支持

B+树

用于 MySQL Cluster 分布式系统,适合高可用集群部署。

1.2. SQL查询流程

执行流程详解:

1. 连接器(Connection)

  • 检查用户账号和密码,校验权限。
  • 通过权限后建立连接进入后续流程。

解决MySQL中长连接内存占用太大的问题:

  1. 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。
  2. 如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

2. 分析器(Parser)

  • 进行语法分析,识别 SQL 中的关键字、字段名、表名等。
  • 输出解析树(Parse Tree)。

3. 优化器(Optimizer)

  • 判断是否存在索引,决定是否走全表扫描或使用索引。
  • 确定表连接顺序、选择最优执行路径。

4. 执行器(Executor)

  • 调用存储引擎接口访问表数据。
  • 根据优化器的决策执行操作并返回结果。

在数据库的慢查询日志中看到一个 rows_examined 的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的。

在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同的。


http://www.hkcw.cn/article/tZoDXoftwQ.shtml

相关文章

DeepSeek R1-0528 新开源推理模型(免费且快速)

DeepSeek推出了新模型,但这不是R2! R1-0528是DeepSeek的最新模型,在发布仅数小时后就在开源社区获得了巨大关注。 这个悄然发布的模型DeepSeek R1-0528,已经开始与OpenAI的o3一较高下。 让我来详细介绍这次更新的新内容。 DeepSeek R1-0528 发布 DeepSeek在这次发布中采…

杏仁海棠花饼的学习日记第十四天CSS

一,前言 第二天,今天看CSS。 二,CSS简介及导入方式 CSS简介 CSS(层叠样式表,Cascading Style Sheets)是一种用于描述 HTML 或 XML(包括 SVG、XHTML 等)文档呈现效果的样式语言。…

尚硅谷redis7 74-85 redis集群分片之集群是什么

74 redis集群分片之集群是什么 如果主机宕机,那么写操作就被暂时中断,后面就要由哨兵进行投票和选举。那么一瞬间若有大量的数据修改,由于写操作中断就会导致数据流失。 由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行…

【Linux笔记】——进程间关系与守护进程

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:linux 🌹往期回顾🌹: 【计算机网络】基于TCP进行socket编程——实现客户端到服务端远程命令行操作 🔖流水不争&#xf…

OSI 七大层详解

一、应用层 人与电脑相互沟通的桥梁,该层协议定义了应用进程之间的交互规则,通过不同的应用层协议为不同的网络应用提供服务。 二、表示层 定义数据格式(比如.pdf .txt)、加密解密、压缩解压缩 三、会话层 建立、管理和终止链…

Vue的生命周期

一、生命周期是什么 生命周期(Life Cycle)的概念应用很广泛,特别是在政治、经济、环境、技术、社会等诸多领域经常出现,其基本涵义可以通俗地理解为“从摇篮到坟墓”(Cradle-to-Grave)的整个过程在Vue中实…

如何用Go创建一个 deployment 到容器拉起来的全流程

整体流程概述: 认证与配置: 连接到Kubernetes集群。创建Deployment对象: 构建一个appsv1.Deployment结构体,定义Pod的模板、副本数量、选择器等。发送创建请求: 使用Kubernetes Go客户端库将Deployment对象发送到API服…

echarts主题切换实现

文章目录 一、实现方式1.实现思路2.指定主题3.设置图表背景透明 二、具体实现1.监听与销毁2修改主题色细节 参考链接 一、实现方式 场景: 首先是我的项目有不同主题色,切换主题时候想要将echarts的图表主题色也一并更改,暂时只设置’light’和’dark’…

如何在 Ubuntu 24.04 服务器上安装 Apache Solr

Apache Solr 是一个免费、开源的搜索平台,广泛应用于实时索引。其强大的可扩展性和容错能力使其在高流量互联网场景下表现优异。 Solr 基于 Java 开发,提供了分布式索引、复制、负载均衡及自动故障转移和恢复等功能。 本教程将指导您如何在 Ubuntu 24.…

从零开始的云计算生活——第十四天,困难重重,安全管理。

一故事背景 在前面的基本无操作内容后,来到了大头内容,安全管理!其中的防火墙相关的内容更是重中之重,要好好掌握,熟练运用。 二SELinux安全上下文 1SELinux 简介 a. SELinux(Security-Enhanced Linux&…

UDP编程

udp是无连接的,没有listen 与 accept。 bind 服务端一定需要bind,告知别人自己的ip和port。 客户端可以不bind,在发送数据时候可以随机分配,客户端推荐bind(与tcp不同,udp本身无连接)。 注意&am…

【计网】分片

MF DF MAC帧 MTU 首部数据载荷 片偏移是整数

记录一个梦,借助大语言模型图片生成

梦见家门口有一条大河,但大河和其它景物都是灰暗没有鲜艳色彩很普通的梦中场景。大河似乎是长江的支流,但也可能有一个响亮的名字似乎是金沙江。 突然看到一条金红色的龙在快速游动,不敢相信自己的眼睛,因为一直不相信有这种生物…

PostgreSQL查询一个表的数据

要从一个表中检索数据就是按要求查询表的信息,。SQL的SELECT语句可分为: 1.选择列表(选择查询返回的列) 2.表列表操作(从中查询出的数据,进一步进行加减乘除-*/、筛选等操作) 3.可选的条件 whe…

聊聊后端面试中的MySQL高频考题

如大家所了解的,SQL( Structured Query Language )是一门在开发者中使用覆盖率超50%的数据库结构化查询语言。 不可否认,无论是常年与数据打交道的数据分析师和数据科学家,经常需要管理和维护数据库的数据库管理员&am…

R3GAN利用配置好的Pytorch训练自己的数据集

简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异性能。 论文题目:The GAN is dead; long l…

【python深度学习】Day 39 图像数据与显存

知识点 图像数据的格式:灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 作业:今日代码较少,理解内容即可 一、图像数据的介绍 结构化数据(如表…

mongodb源码分析session接受客户端find命令过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制。 现在继续研究ASIOSession和connection是怎么接受客户端命令的? mongo/transport/service_state_machine.cpp核心方法有&#xf…

酒店管理破局:AI 引领智能化转型

一、酒店行业现状:规模扩张加速与效率瓶颈并存 根据中国五矿证券《中国酒店行业格局分析》报告,国内酒店行业呈现头部集中化趋势。截至2024年第三季度,锦江酒店以13,186家门店、125.8万间客房的规模稳居行业第一[1]。华住集团则以178.68亿元…

大模型深度学习之双塔模型

前言 双塔模型(Two-Tower Model)是一种在推荐系统、信息检索和自然语言处理等领域广泛应用的深度学习架构。其核心思想是通过两个独立的神经网络(用户塔和物品塔)分别处理用户和物品的特征,并在共享的语义空间中通过相…