当前位置: 首页 > article >正文

【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

相关文章:

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

MySQL SQL语句执行过程详解 作为面试官,我来详细剖析一条SQL语句在MySQL中的完整执行过程,这是每个后端开发者都应该掌握的核心知识。 一、连接阶段 建立连接 客户端通过TCP/IP协议与MySQL服务器建立连接(默认3306端口)服务器验证用户名、密码和权限…...

Linux(autoDL云服务器)mamba-ssm环境安装——一次成功!

1.创建环境选择torch2.0, cuda11.8,python3.8 2.从GitHub官网下载cp38对应的,causl_conv1d,和mamba-ssm2.2.2。下载入下图所示。 3.直接用finalshell 或者xshell连接服务器上传,到根目录下面。 直接用pip install *…...

代码审计入门 原生态sql注入篇

前置知识: 漏洞形成的原因: 1、可控的参数 2、函数缺陷 代码审计的步骤: 1、全局使用正则搜索 漏洞函数 ,然后根据函数看变量是否可控,再看函数是否有过滤 2、根据web的功能点寻找函数,然后根据函数看…...

spring Ai---向量知识库(一)

在一些垂直领域以及公司内部信息相关或者实时性相关的大模型应用,就无法直接使用chatGPT。 这个时候,向量知识库就进入了。 通过坐标向量最接近的即为匹配相关答案。 向量模型定义:将文档向量化,保证内容越相似的文本,…...

jmeter利用csv进行参数化和自动断言

1.测试数据 csv测试数据如下(以注册接口为例) 2.jemer参数化csv设置 打开 jmeter,添加好线程组、HTTP信息头管理器、CSV 数据文件设置、注册请求、响应断言、查看结果树 1) CSV 数据文件设置 若 CSV 中数据包含中文,…...

C# 类型、存储和变量(数据成员和函数成员)

本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 数据成员和函数成员 像short、int和long等这样的类型称为简单类型。这种类型只能存储一个数据项。 其…...

Java八种常见的设计模式

一、单例模式 单例模式是(Singleton Pattern)Java中最常用的设计模式之一,它保证一个类仅有一个实例,并提供一个全局访问点。 实现单例模式的核心是将类的构造方法私有化,以防止外部直接通过构造函数创建实例。同时&am…...

数据结构实验7.2:二叉树的基本运算

文章目录 一,实验目的二,问题描述三,基本要求四,实验操作五,示例代码六,运行效果 一,实验目的 深入理解树与二叉树的基本概念,包括节点、度、层次、深度等,清晰区分二叉…...

Go-zero框架修改模版进行handler统一响应封装

使用go-zero快速生成接口的时候,发现还是有一些情况不太好处理,比如说,想要自定义响应封装等等。 最开始第一版写api文件的时候,写法是这样的。 type LoginRequest {UserName string json:"userName"Password string …...

AI专题(一)----NLP2SQL探索以及解决方案

前面写了很多编码、算法、底层计算机原理等相关的技术专题,由于工作方向调整的缘故,今天开始切入AI人工智能相关介绍。本来按照规划,应该先从大模型的原理开始介绍会比较合适,但是计划赶不上变化,前面通用大模型的工作…...

深入理解 React Hooks:简化状态管理与副作用处理

在现代前端开发中,React 已经成为了最受欢迎的 JavaScript 库之一。随着 React 16.8 的发布,React Hooks 的引入彻底改变了开发者编写组件的方式。Hooks 提供了一种更简洁、更直观的方式来管理组件的状态和副作用,使得函数组件能够拥有类组件…...

Spring Boot 实现防盗链

在 Spring Boot 项目中实现防盗链可以通过多种方式,下面为你介绍两种常见的实现方法,分别是基于请求头 Referer 和基于令牌(Token)的防盗链。 基于请求头 Referer 的防盗链 这种方法通过检查请求头中的 Referer 字段&#xff0c…...

Java 动态代理实现

Java 动态代理实现 一、JDK动态代理二、CGLIB动态代理三、动态代理的应用场景四、JDK代理与CGLIB代理比较 动态代理是Java中一种强大的技术,它允许在运行时创建代理对象,用于拦截对目标对象的方法调用。 一、JDK动态代理 JDK动态代理是Java标准库提供的代…...

2025年4月通信科技领域周报(4.07-4.13):6G技术加速落地 卫星通信网络迎来组网高潮

2025年4月通信科技领域周报(4.07-4.13):6G技术加速落地 卫星通信网络迎来组网高潮 目录 2025年4月通信科技领域周报(4.07-4.13):6G技术加速落地 卫星通信网络迎来组网高潮一、本周热点回顾1. 华为发布全球首…...

《手环表带保养全攻略:材质、清洁与化学品避坑指南》

系列文章目录 文章目录 系列文章目录前言一、表带材质特性与专属养护方案二、清洁剂使用红黑榜三、家庭清洁实验:化学反应警示录四、保养实践方法论总结 前言 手环作为现代生活的智能伴侣,表带材质选择丰富多样。从柔软亲肤的皮质到耐用耐磨的金属&…...

人脸扫描黑科技:多相机人脸扫描设备,打造你的专属数字分身

随着科技的迅猛发展,人脸扫描这个词已经并不陌生,通过人脸扫描设备制作超写实人脸可以为影视制作打造逼真角色、提升游戏沉浸感,还能助力教育机构等领域生产数字人以丰富教学资源,还在安防、身份识别等领域发挥关键作用&#xff0…...

基于Python的中国象棋小游戏的设计与实现

基于Python的中国象棋小游戏的设计与实现 第一章 绪论1.1 研究背景1.2 研究意义 第二章 需求分析2.1 需求分析2.1.1核心功能需求2.1.2 用户体验需求2.1.3 衍生功能需求 2.2 可行性分析2.2.1 技术可行性2.2.2 经济可行性2.2.3 市场可行性2.2.4 法律与合规性 第三章 概要设计3.1 …...

简单好用的在线工具

用AI写了一些在线工具,简介好用,推荐给大家,欢迎大家使用并提议意见。 网址:https://www.bittygarden.com/ 目前已有以下功能: MD5SM3SHAUnicode 编码Unicode 解码Base32 编码Base32 解码Base64 编码Base64 解码URL …...

JAVA设计模式——(1)适配器模式

JAVA设计模式——(1)适配器模式 目的理解实现优势 目的 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够在一起工作。 理解 可以想象成一个国标的插头,结果插座是德标的&…...

外卖市场规模巨大,是宽广赛道?京东CEO发言

大家好,我是小悟。 在竞争激烈的外卖市场中,京东作为新入局者,正以独特的战略视角和坚定的决心,重新定义外卖行业的竞争格局。 近日,京东集团CEO许冉在接受采访时表示:“外卖行业本就是一个宽广的赛道&am…...

Flutter PIP 插件 ---- iOS Video Call 自定义PIP WINDOW渲染内容

简介 画中画(Picture in Picture, PiP)是一项允许用户在使用其他应用时继续观看视频内容的功能。本文将详细介绍如何在 iOS 应用中实现 PiP 功能,包括自定义内容渲染和控制系统控件的显示。 效果展示 功能特性 已完成功能 ✅ 基础 PiP 接口实现(设置…...

TensorFlow 实现 Mixture Density Network (MDN) 的完整说明

本文档详细解释了一段使用 TensorFlow 构建和训练混合密度网络(Mixture Density Network, MDN)的代码,涵盖数据生成、模型构建、自定义损失函数与预测可视化等各个环节。 1. 导入库与设置超参数 import numpy as np import tensorflow as t…...

xml+html 概述

1.什么是xml xml 是可扩展标记语言的缩写&#xff1a; Extensible Markup Language。 <root><h1> text 1</h1> </root> web 应用开发&#xff0c;需要配置 web.xml&#xff0c;就是个典型的 xml文件 <web-app><servlet><servlet-name&…...

混合精度训练中的算力浪费分析:FP16/FP8/BF16的隐藏成本

在大模型训练场景中&#xff0c;混合精度训练已成为降低显存占用的标准方案。然而&#xff0c;通过NVIDIA Nsight Compute深度剖析发现&#xff0c;‌精度转换的隐藏成本可能使理论算力利用率下降40%以上‌。本文基于真实硬件测试数据&#xff0c;揭示不同精度格式的计算陷阱。…...

Python语法系列博客 · 第5期[特殊字符] 模块与包的导入:构建更大的程序结构

上一期小练习解答&#xff08;第4期回顾&#xff09; ✅ 练习1&#xff1a;判断偶数函数 def is_even(num):return num % 2 0print(is_even(4)) # True print(is_even(5)) # False✅ 练习2&#xff1a;求平均值 def avg(*scores):return sum(scores) / len(scores)print(…...

Sleuth+Zipkin 服务链路追踪

微服务架构中&#xff0c;为了更好追踪服务之间调用&#xff0c;实现时间分析&#xff0c;性能瓶颈分析&#xff0c;故障排查&#xff0c;因此有必要搭建链路追踪。下面简单介绍下实现的过程。 一.引入依赖 <!-- 链路追踪 zipkin已经集成有sleuth&#xff0c;不需要再单独…...

意志力的源头——AMCC(前部中扣带皮层)

AMCC&#xff08;前部中扣带皮层&#xff09;在面对痛苦需要坚持的事情时会被激活。它的存在能够使人类个体在面临困难的事、本能感到不愿意的麻烦事情时&#xff0c;能够自愿地去做这些事——这些事必须是局部痛苦或宏观的痛苦&#xff0c;即微小的痛苦micro-sucks。 AMCC更多…...

[Jenkins]pnpm install ‘pnpm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

这个错误提示再次说明&#xff1a;你的系统&#xff08;CMD 或 Jenkins 环境&#xff09;找不到 pnpm 命令的位置。虽然你可能已经用 npm install -g pnpm 安装过&#xff0c;但系统不知道它装在哪里&#xff0c;也就无法执行 pnpm 命令。 ✅ 快速解决方法&#xff1a;直接用完…...

Java从入门到“放弃”(精通)之旅——数组的定义与使用⑥

Java从入门到“放弃”&#xff08;精通&#xff09;之旅&#x1f680;——数组⑥ 前言——什么是数组&#xff1f; 数组&#xff1a;可以看成是相同类型元素的一个集合&#xff0c;在内存中是一段连续的空间。比如现实中的车库&#xff0c;在java中&#xff0c;包含6个整形类…...

部署rocketmq集群

容器化部署RocketMQ5.3.1集群 背景: 生产环境单机的MQ不具有高可用,所以我们应该部署成集群模式,这里给大家部署一个双主双从异步复制的Broker集群 一、安装docker yum install -y docker systemctl enable docker --now # 单机部署参考: https://www.cnblogs.com/hsyw/p/1…...