【MySQL】SQL语句在MySQL中的执行过程?主要存储引擎区别?

MySQL SQL语句执行过程详解

作为面试官,我来详细剖析一条SQL语句在MySQL中的完整执行过程,这是每个后端开发者都应该掌握的核心知识。

一、连接阶段

  1. 建立连接
  • 客户端通过TCP/IP协议与MySQL服务器建立连接(默认3306端口)
  • 服务器验证用户名、密码和权限
  • 连接管理器创建线程处理该连接(线程池优化)
  1. 查询缓存(MySQL 8.0已移除)
  • 如果是SELECT语句,先检查查询缓存
  • 命中缓存则直接返回结果(缓存key是完整SQL)
  • 注意:表数据变更加粗样式会使相关缓存失效

二、解析与优化阶段

  1. 解析器处理
  • 词法分析:将SQL拆分为token(关键字、标识符等)
  • 语法分析:检查SQL是否符合语法规则
  • 生成解析树(语法树)
  1. 预处理器
  • 检查表和列是否存在
  • 检查权限
  • 视图展开等转换操作
  1. 查询优化器
  • 基于成本优化(CBO)选择最优执行计划加粗样式
  • 考虑因素:索引、表大小、JOIN顺序等
  • 生成执行计划(可通过EXPLAIN查看)

三、执行阶段

  1. 执行引擎处理
  • 调用存储引擎API执行计划
  • 不同存储引擎(如InnoDB)实现不同
  1. InnoDB引擎处理流程
  • 缓冲池(Buffer Pool)检查:首先检查所需数据页是否在内存
  • 磁盘读取:若不在缓冲池,从磁盘加载数据页到内存
  • 锁机制:根据隔离级别加锁(共享锁/排他锁)
  • 事务处理写入undo log(用于回滚)和redo log(用于恢复)
  • 返回结果:将结果集放入网络缓冲区

四、返回结果

  1. 结果返回客户端
  • 结果集通过网络协议返回
  • 客户端逐步接收并处理数据
  • 连接保持或关闭(取决于配置)

MySQL存储引擎区别详解

一、MySQL主要存储引擎

  1. InnoDB (MySQL 5.5+默认引擎)
  2. MyISAM (MySQL 5.5前默认引擎)
  3. MEMORY (内存引擎)
  4. ARCHIVE (归档引擎)
  5. CSV (CSV文件引擎)
  6. BLACKHOLE (黑洞引擎)
  7. FEDERATED (联邦引擎)
  8. MERGE (MyISAM集合引擎)

二、核心引擎对比(InnoDB vs MyISAM)

特性InnoDBMyISAM
事务支持支持ACID事务不支持
锁粒度行级锁表级锁
外键支持支持不支持
崩溃恢复有redo log保证无保证
MVCC支持多版本并发控制不支持
存储限制64TB256TB
缓存机制缓冲池缓存数据和索引只缓存索引
全文索引MySQL 5.6+支持支持
压缩表支持支持
适用场景OLTP、高并发写OLAP、读密集型、数据仓库

三、引擎特点

引自腾讯云 MySQL 的存储引擎有哪些?它们之间有什么区别?

  1. InnoDB
  • 事务支持:InnoDB 是默认的存储引擎,支持事务处理(ACID 属性)。
  • 行级锁:使用行级锁,适合高并发环境。
  • 外键支持:支持外键约束。
  • 崩溃恢复:具有自动崩溃恢复功能。
  • 性能:在读写混合加粗样式负载下表现良好。
  • 存储:数据存储在表空间中,支持表空间的动态扩展加粗样式
  1. MyISAM
  • 不支持事务:不支持事务处理。
  • 表级锁:使用表级锁,不适合高并发写操作。
  • 全文索引:支持全文索引,适合搜索引擎等应用。
  • 性能:在只读或读多写少的场景下性能较好。
  • 存储:数据存储在磁盘文件中,每个表对应一个 .MYD 文件(数据文件)和一个 .MYI 文件(索引文件)。
  1. Memory
  • 内存存储:数据存储在内存中,速度快但不持久。
  • 临时数据:适合存储临时数据,如缓存、中间结果等。
  • 不支持事务:不支持事务处理。
  • 表级锁:使用表级锁
  • 性能:在需要高速读取的场景下性能非常好。
  1. Archive
  • 压缩存储:数据以压缩格式存储,占用空间小。
  • 只读:主要用于归档和日志记录不支持更新操作。
  • 不支持索引:不支持索引,查询性能较差。
  • 性能:适合存储大量历史数据,节省存储空间。
  1. CSV
  • CSV 文件:数据存储在 CSV 文件中,可以直接用文本编辑器打开
  • 简单:适合简单的数据导入导出操作。
  • 不支持事务:不支持事务处理。
  • 性能:性能较低,不适合大规模数据操作。
  1. Blackhole
  • 黑洞存储:所有写入的数据都会被丢弃,不实际存储任何数据。
  • 日志记录:主要用于测试和日志记录
  • 性能:写操作非常快,因为数据实际上没有被存储。
  1. Federated
  • 远程表:允许访问其他 MySQL 服务器上的表,实现分布式数据库
  • 性能:性能受网络延迟影响较大。
  • 不支持事务:不支持事务处理。
  1. Merge
  • 合并多个表:可以将多个 MyISAM 表合并成一个逻辑表。
  • 性能:适合需要对多个表进行统一查询的场景。
  • 不支持事务:不支持事务处理。

https://github.com/0voice

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

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

相关文章

【记录】服务器安装ffmpeg

前言 因为项目中需要用到 ffmpeg 进行图像的一些操作,本文记录下在服务器安装 ffmpeg 的全过程,还是具有一定挑战性的。 系统详情 本文使用的操作系统详情如下 通过 命令 cat /etc/os-release 获取 虽然操作系统为 Rocky Linux,但安装过程是通用的,因为本文记录的是从源代码…

Django之modelform使用

Django新增修改数据功能优化 目录 1.新增数据功能优化 2.修改数据功能优化 在我们做数据优化处理之前, 我们先回顾下传统的写法, 是如何实现增加修改的。 我们需要在templates里面新建前端的页面, 需要有新增还要删除, 比如说员工数据的新增, 那需要有很多个输入框, 那html…

HTML5 应用程序缓存:原理、实践与演进

在 Web 技术的发展历程中,HTML5 引入的应用程序缓存(Application Cache)曾是提升 Web 应用离线体验的重要技术。它允许 Web 应用进行缓存,使用户在没有因特网连接时也能访问应用,为 Web 应用带来了显著的优势。然而&am…

【问题笔记】解决python虚拟环境运行脚本无法激活问题

【问题笔记】解决python虚拟环境运行脚本无法激活问题 错误提示问题所在解决方法**方法 1:临时更改执行策略****方法 2:永久更改执行策略** **完整流程示例** 错误提示 PS F:\PythonProject\0419graphrag-local-ollama-main> venv1\Scripts\activate…

解决echarts饼图label显示不全的问题

解决办法 添加如下配置: labelLayout: {hideOverlap: false},

Pandas数据合并与重塑

在数据处理与分析的领域中,Pandas 无疑是一颗璀璨的明星。它提供了丰富且强大的功能,让我们能够轻松应对各种复杂的数据操作。其中,数据合并与重塑是两个至关重要的环节,它们能够帮助我们整合不同来源的数据,调整数据的…

Nodejs数据库单一连接模式和连接池模式的概述及写法

概述 单一连接模式和连接池模式是数据库连接的两种主要方式: 单一连接模式: 优点:实现简单,适合小型应用缺点:每次请求都需要创建新连接,连接创建和销毁开销大,并发性能差,容易出…

将 DeepSeek 集成到 Spring Boot 项目实现通过 AI 对话方式操作后台数据

文章目录 项目简介GiteeMCP 简介环境要求项目代码核心实现代码MCP 服务端(批量注册 Tool)MCP 客户端(调用 DeepSeek) DeepSeek APIDockersse 连接ws 连接(推荐)http 连接 Cherry Studio配置模型配置 MCP调用…

【HDFS入门】HDFS性能调优实战:压缩与编码技术深度解析

目录 1 HDFS性能调优概述 2 HDFS压缩技术原理与应用 2.1 常见压缩算法比较 2.2 压缩流程架构 2.3 压缩配置实践 3 列式存储编码技术 3.1 ORC与Parquet对比 3.2 ORC文件结构 3.3 Parquet编码流程 4 性能调优实战建议 4.1 压缩选择策略 4.2 编码优化技巧 5 性能测试…

HCIP --- OSPF综合实验

一、拓扑图 二、实验要求 1,R5为ISP,其上只能配置IP地址;R4作为企业边界路由器,出口公网地址需要通过PPP协议获取,并进行chap认证。 2,整个0SPF环境IP基于172.16.0.8/16划分。 3,所有设备均可访问R5的环…

c++:线程(std::thread)

目录 从第一性原理出发:为什么需要线程? ✅ 本质定义: 📌 使用基本语法: 线程之间的“并发”与“并行”的区别 线程安全与数据竞争(Race Condition) 如何让线程“安全地”访问数据&#x…

PCL软件架构

Point Cloud Library (PCL) 采用模块化设计,提供了丰富的点云处理功能。以下是PCL的核心架构和主要类的详细介绍。 一、PCL整体架构 PCL的架构可以分为以下几个主要层次: 数据表示层:基础点云数据结构和基本操作 算法层:各种点云处理算法实现 I/O层:点云数据的输入输出 …

CCLinkIE转EtherCAT边缘计算网关构建智能产线:跨协议设备动态组网与数据优化传输

一、行业背景 随着新能源汽车市场爆发式增长,汽车制造企业对产线效率、设备协同性及柔性生产能力的要求显著提升。传统产线多采用CC-LinkIEFieldBasic(CCLINKIEFB)协议的三菱PLC控制系统,而新一代伺服驱动设备普遍采用EtherCAT协…

模态双侠闯江湖:SimTier 分层破局,MAKE 智炼新知

目录 利用多模态表示提升淘宝展示广告效果:挑战、方法与洞察摘要1 引言2 预备知识推荐模型中的ID特征基于ID的模型结构 3 多模态表示的预训练3.1 语义感知对比学习3.2 预训练数据集的构建3.3 优化 4 与推荐模型的集成4.1 观察和见解4.2 方法一:SimTier4.…

基于大模型的下肢静脉曲张全流程预测与诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、下肢静脉曲张概述 2.1 定义与病理生理 2.2 风险因素与临床表现 2.3 诊断方法与现有治疗手段 三、大模型预测原理与构建 3.1 大模型技术简介 3.2 预测模型的数据收集与预处理 3.…

跨站脚本(XSS) 的详细分类、对比及解决方案

以下是 跨站脚本(XSS) 的详细分类、对比及解决方案: 一、XSS的分类与详解 1. 反射型XSS(非持久型XSS) 定义:攻击载荷通过URL参数传递,服务器直接返回到页面中,需用户主动触发。 工…

thinkphp实现图像验证码

示例 服务类 app\common\lib\captcha <?php namespace app\common\lib\captcha;use think\facade\Cache; use think\facade\Config; use Exception;class Captcha {private $im null; // 验证码图片实例private $color null; // 验证码字体颜色// 默认配置protected $co…

swift-12-Error处理、关联类型、assert、泛型_

一、错误类型 开发过程常见的错误 语法错误&#xff08;编译报错&#xff09; 逻辑错误 运行时错误&#xff08;可能会导致闪退&#xff0c;一般也叫做异常&#xff09; 2.1 通过结构体 第一步 struct MyError : Errort { var msg: String &#xff5d; 第二步 func divide(_ …

实验扩充 LED显示4*4键位值

代码功能概述 键盘扫描&#xff1a; 使用 KeyPort&#xff08;定义为 P1&#xff09;作为键盘输入端口。扫描 4x4 矩阵键盘&#xff0c;检测按键并返回按键编号&#xff08;0~15&#xff09;。 数码管显示&#xff1a; 根据按键编号&#xff0c;从 SegCode 数组中获取对应数码…

从零开始搭建CLIP模型实现基于文本的图像检索

目录 CLIP原理简介代码实现参考链接 CLIP原理简介 论文链接&#xff0c;源码链接 CLIP模型由OpenAI在2021年提出&#xff0c;利用双Decoder&#xff08;Dual Encoder&#xff09;的架构来学习图像和文本之间的对应关系&#xff0c;是多模态大模型的开创之作&#xff0c;为后续许…