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

一条 SQL 查询语句是如何执行的(MySQL)

第一讲:一条 SQL 查询语句是如何执行的

总览图示

MySQL 查询的执行流程可以大致分为以下步骤(如图所示):

  1. 连接器(Connection)
  2. 查询缓存(Query Cache,MySQL 8.0 已废弃)
  3. 分析器(Parser)
  4. 优化器(Optimizer)
  5. 执行器(Executor)

整个 MySQL 架构分为 Server 层存储引擎层(Storage Engine)

Server 层存储引擎层
连接器、查询缓存、分析器、优化器、执行器、内置函数、触发器、视图、存储过程等数据的实际存储与读取,支持 InnoDB、MyISAM、Memory 等引擎

一、连接器(Connector)

负责管理客户端连接、验证身份、权限检查及连接生命周期维护。

mysql -h<ip地址> -P<端口> -u<用户名> -p

工作流程:

  1. 验证用户身份:连接后输入密码,系统校验用户名/密码是否正确。
  2. 权限校验:认证通过后,系统会从权限表读取用户权限。更改权限后需重新连接才能生效
  3. 连接状态管理:长时间不操作,连接会因 wait_timeout 参数超时自动断开(默认8小时)。
  4. 长连接问题
    • 长连接可减少连接频率,但可能导致内存膨胀。
    • 推荐措施:
      • 定期断开或重置连接。
      • 使用 mysql_reset_connection(MySQL 5.7+)释放连接资源,但不需重新验证权限。

二、查询缓存(Query Cache)

说明:MySQL 8.0 已彻底移除查询缓存功能,以下内容适用于旧版本。

工作原理:

  • 执行 SELECT 语句前,先检查是否有完全相同的 SQL 已执行过并缓存在内存中(key=语句文本,value=结果集)。
  • 命中缓存则直接返回结果,跳过后续步骤。
  • 未命中则执行后续流程,并将结果缓存。

使用建议:

  • 查询缓存对动态更新频繁的表几乎无效,一旦表被修改,与其相关的所有缓存都会失效。

  • 只适合查询频率高、更新频率低的静态表(如配置表)。

  • 推荐按需使用:

    SELECT SQL_CACHE * FROM T WHERE ID=10;
    

三、分析器(Parser)

将 SQL 文本转换为数据库能识别的结构形式(语法分析 + 词法分析)。

功能:

  1. 词法解析:识别关键词、表名、字段名等组成部分。
  2. 语法检查:验证 SQL 是否符合语法规范。

示例:

elect * from t where ID=1;

报错信息:

ERROR 1064 (42000): You have an error in your SQL syntax;

错误提示会定位到第一个出错的位置,关注提示中的 use near 即可定位错误代码段。


四、优化器(Optimizer)

SQL 有多种执行方式,优化器选择最优执行路径。

功能:

  • 决定使用哪个索引(如多索引场景)
  • 决定多表 JOIN 顺序(不同顺序会影响执行效率)

示例:

SELECT * FROM t1 JOIN t2 USING(ID) WHERE t1.c=10 AND t2.d=20;

两种执行方案:

  1. 先查 t1.c=10,再连表 t2 判断 t2.d=20
  2. 先查 t2.d=20,再连表 t1 判断 t1.c=10

优化器会选择代价(成本)最低的执行路径。


五、执行器(Executor)

执行器按优化器选择的方案实际执行查询语句。

流程:

  1. 权限检查:再次验证用户是否对该表有查询权限。
  2. 调用引擎接口:根据是否有索引,选择不同的数据读取方式。

无索引执行流程:

SELECT * FROM T WHERE ID=10;

执行器会:

  1. 顺序读取每一行(全表扫描)
  2. 判断是否满足 ID=10 条件
  3. 满足则加入结果集
  4. 返回所有结果集给客户端

有索引执行流程:

  • 使用索引快速定位满足条件的记录。
  • 使用“满足条件的第一行” → “下一行”的迭代接口。
  • 查询效率显著提升。

在慢查询日志中可以看到 Rows_examined 字段,即执行过程中扫描的数据行数。

相关文章:

一条 SQL 查询语句是如何执行的(MySQL)

第一讲&#xff1a;一条 SQL 查询语句是如何执行的 总览图示 MySQL 查询的执行流程可以大致分为以下步骤&#xff08;如图所示&#xff09;&#xff1a; 连接器&#xff08;Connection&#xff09;查询缓存&#xff08;Query Cache&#xff0c;MySQL 8.0 已废弃&#xff09;…...

IntelliJ IDEA

文章目录 一、集成开发环境(IDE, Integrated Development Environment)二、IntelliJ IDEAIDEA 安装 三、IDEA 管理 Java 程序的结构四、IDEA 开发 HelloWorld 程序 一、集成开发环境(IDE, Integrated Development Environment) 把代码编写&#xff0c;编译&#xff0c;执行等多…...

详细说明StandardCopyOption.REPLACE_EXISTING参数的作用和使用方法

StandardCopyOption.REPLACE_EXISTING 是 Java java.nio.file.StandardCopyOption 枚举类中的一个常量&#xff0c;它主要用于在文件复制或移动操作中处理目标文件已存在的情况。下面详细介绍其作用和使用方法。 作用 在使用 java.nio.file.Files 类的 copy() 或 move() 方法时…...

Linux 下使用tcpdump进行网络分析原

简介 tcpdump 是一个命令行数据包分析器&#xff0c;可实时捕获和检查网络流量。它通常用于网络故障排除、性能分析和安全监控。 安装 Debian/Ubuntu sudo apt update && sudo apt install tcpdump -yCentOS/RHEL sudo yum install tcpdump -ymacOS brew install…...

人车交叉作业防撞系统介绍

一、技术原理与核心功能 UWB脉冲测距技术 系统基于UWB技术&#xff0c;通过纳秒级非正弦窄脉冲&#xff08;脉冲宽度0.21.5ns&#xff09;实现实时测距&#xff0c;精度可达1030厘米。 工作原理&#xff1a;人员佩戴防撞标签&#xff08;A&#xff09;与车载基站&#xff08;B&…...

移动端开发中设备、分辨率、浏览器兼容性问题

以下是针对移动端开发中设备、分辨率、浏览器兼容性问题的 系统化解决方案&#xff0c;按开发流程和技术维度拆解&#xff0c;形成可落地的执行步骤&#xff1a; 一、基础环境适配&#xff1a;从「起点」杜绝兼容性隐患 1. Viewport 元标签标准化 <meta name"viewpor…...

Git 基本操作(二)

目录 撤销修改操作 情况一 情况二 情况三 删除文件 升级git 撤销修改操作 在日常编码过程中&#xff0c;有些时候&#xff0c;我们可能写着写着发现目前的版本的代码越写越挫&#xff0c;越不符合标准&#xff0c;想让我们当前的文件去恢复到上一次提交的版本…...

多模态大模型轻量化探索-开源SmolVLM模型架构、数据策略及其衍生物PDF解析模型SmolDocling

在《多模态大模型轻量化探索-视觉大模型SAM的视觉编码器》介绍到&#xff0c;缩小视觉编码器的尺寸&#xff0c;能够有效的降低多模态大模型的参数量。再来看一个整体的工作&#xff0c;从视觉侧和语言模型侧综合考量模型参数量的平衡模式&#xff0c;进一步降低参数量&#xf…...

gRPC学习笔记记录以及整合gin开发

gprc基础 前置环境准备 grpc下载 项目目录下执行 go get google.golang.org/grpclatestProtocol Buffers v3 https://github.com/protocolbuffers/protobuf/releases/download/v3.20.1/protoc-3.20.1-linux-x86_64.zip go语言插件&#xff1a; go install google.golang.…...

Linux diff 命令使用详解

简介 Linux 中的 diff 命令用于逐行比较文件。它以各种格式报告差异&#xff0c;广泛应用于脚本编写、开发和补丁生成。 基础语法 diff [OPTION]... FILES常用选项 -i&#xff1a;忽略大小写 -u&#xff1a;打印输出时不包含任何多余的上下文行 -c&#xff1a;输出不同行周…...

非对称加密算法(RSA、ECC、SM2)——密码学基础

对称加密算法&#xff08;AES、ChaCha20和SM4&#xff09;Python实现——密码学基础(Python出现No module named “Crypto” 解决方案) 这篇的续篇&#xff0c;因此实践部分少些&#xff1b; 文章目录 一、非对称加密算法基础二、RSA算法2.1 RSA原理与数学基础2.2 RSA密钥长度…...

【安装指南】Chat2DB-集成了AI功能的数据库管理工具

一、Chat2DB 的介绍 Chat2DB 是一款开源的、AI 驱动的数据库工具和 SQL 客户端&#xff0c;提供现代化的图形界面&#xff0c;支持 MySQL、Oracle、PostgreSQL、DB2、SQL Server、SQLite、H2、ClickHouse、BigQuery 等多种数据库。它旨在简化数据库管理、SQL 查询编写、报表生…...

【C++】认识map和set

目录 前言&#xff1a; 一&#xff1a;认识map和set 二&#xff1a;map和set的使用 1.set的使用 2.map的使用 三&#xff1a;map的insert方法返回值 四&#xff1a;map的[ ]的使用 五&#xff1a;multiset和multimap 六&#xff1a;map和set的底层数据结构 七&#x…...

LWIP带freeRTOS系统移植笔记

以正点原子学习视频为基础的文章 LWIP带freeRTOS系统移植 准备资料/工程 1、lwIP例程1 lwIP裸机移植 工程 &#xff0c; 作为基础工程 改名为LWIP_freeRTOS_yizhi工程 2、lwIP例程6 lwIP_FreeRTOS移植 工程 3、freeRTO源码 打开https://www.freertos.org/网址下载…...

【MinerU技术原理深度解析】大模型时代的文档解析革命

目录 一、MinerU概述 获取MinerU 二、核心功能与技术亮点 1. 多模态解析能力 2. 高效预处理能力 3. 多场景适配性 4. API服务 三、技术架构解析 3.1 概述 1. 模块化处理流程 2. 关键模型与技术 3.2 核心组件技术原理 3.2.1 布局检测(Layout Detection) 3.2.2 公式…...

rabbitMQ如何确保消息不会丢失

rabbitmq消息丢失的三种情况 生产者将消息发送到RabbitMQ的过程中时&#xff0c;消息丢失。消息发送到RabbitMQ&#xff0c;还未被持久化就丢失了数据。消费者接收到消息&#xff0c;还未处理&#xff0c;比如服务宕机导致消息丢失。 解决方案 生产者发送过程中&#xff0c;…...

数字智慧方案5970丨智慧农业大数据服务建设方案(69页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读&#xff1a;智慧农业大数据服务建设方案 在当今数字化时代&#xff0c;农业领域也正经历着深刻变革&#xff0c;智慧农业大数据服务建设方案应运而生。这一方案对推动农业现代化进程意义非凡&#xff0c;下面让我们深入剖析其核心…...

英一真题阅读单词笔记 22-23年

2022年真题阅读单词 2022 年 Text 1 第一段 1 complain [kəmˈpleɪn] v. 抱怨&#xff0c;投诉&#xff1b;诉说&#xff08;病痛&#xff09; 2 plastic [ˈplstɪk] n. 塑料&#xff1b;信用卡 a. 造型的&#xff0c;塑造的&#xff1b;塑料制的 3 durable [ˈd…...

Java大师成长计划之第10天:锁与原子操作

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在多线程编程中&#xff0c;锁与原子…...

2025大模型安全研究十大框架合集(10份)

2025大模型安全研究十大框架合集的详细介绍&#xff1a; Anthropic AI信任研究框架 Anthropic于2024年10月更新的《安全责任扩展政策》(RSP)&#xff0c;提出了一个灵活的动态AI风险治理框架。该框架规定当AI模型达到特定能力时&#xff0c;将自动升级安全措施&#xff0c;如…...

溯因推理思维——AI与思维模型【92】

一、定义 溯因推理思维模型是一种从结果出发,通过分析、推测和验证,寻找导致该结果的可能原因的思维方式。它试图在已知的现象或结果基础上,逆向追溯可能的原因,构建合理的解释框架,以理解事物的本质和内在机制。 二、由来 溯因推理的思想可以追溯到古希腊哲学家亚里士…...

系统架构设计师:设计模式——结构型设计模式

一、结构型设计模式 结构型设计模式涉及如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现。一个简单的例子是采用多重继承方法将两个以上的类组合成一个类&#xff0c;结果这个类包含了所有父类的性质。 这一模式尤其有助于多个独立开发的类库协…...

接口测试实战指南:从入门到精通的质量保障之道

为什么接口测试如此重要&#xff1f; 在当今快速迭代的软件开发环境中&#xff0c;接口测试已成为质量保障体系中不可或缺的一环。据统计&#xff0c;有效的接口测试可以发现约70%的系统缺陷&#xff0c;同时能将测试效率提升3-5倍。本指南将从实战角度出发&#xff0c;系统性…...

对第三方软件开展安全测评,如何保障其安全使用?

对第三方软件开展安全测评&#xff0c;能够精准找出软件存在的各类安全隐患&#xff0c;进而为软件的安全使用给予保障。此次会从漏洞发现、风险评估、测试环境等多个方面进行具体说明。 漏洞发现情况 在测评过程中&#xff0c;我们借助专业技术与工具&#xff0c;对第三方软…...

计算方法实验四 解线性方程组的间接方法

【实验性质】 综合性实验。 【实验目的】 掌握迭代法求解线性方程组。 【实验内容】 应用雅可比迭代法和Gauss-Sediel迭代法求解下方程组&#xff1a; 【理论基础】 线性方程组的数值解法分直接算法和迭代算法。迭代法将方程组的求解转化为构造一个向量序列&…...

Qt 中基于 QTableView + QSqlTableModel 的分页搜索与数据管理实现

Qt 中基于 QTableView QSqlTableModel 的分页搜索与数据管理实现 一、组件说明 QTableView&#xff1a;一个基于模型的表格视图控件&#xff0c;支持排序、选择、委托自定义。QSqlTableModel&#xff1a;与数据库表直接绑定的模型类&#xff0c;可用于展示和编辑数据库表数据…...

云计算-容器云-服务网格Bookinfo

服务网格&#xff1a;创建 Ingress Gateway 将 Bookinfo 应用部署到 default 命名空间下&#xff0c;请为 Bookinfo 应用创建一个网 关&#xff0c;使外部可以访问 Bookinfo 应用。 上传ServiceMesh.tar.gz包 [rootk8s-master-node1 ~]# tar -zxvf ServiceMesh.tar.gz [rootk…...

PostgreSQL自定义函数

自定义函数 基本语法 //建一个名字为function_name的自定义函数create or replace function function_name() returns data_type as //returns 返回一个data_type数据类型的结果&#xff1b;data_type 是返回的字段的类型&#xff1b;$$ //固定写法......//方法体$$ LANGUAGE …...

学习记录:DAY22

我的重生开发之旅&#xff1a;优化DI容器&#xff0c;git提交规范&#xff0c;AOP处理器&#xff0c;锁与并发安全 前言 我重生了&#xff0c;重生到了五一开始的一天。上一世&#xff0c;我天天摆烂&#xff0c;最后惨遭实习生优化。这一世&#xff0c;我要好好内卷… 今天的…...

HarmonyOS NEXT第一课——HarmonyOS介绍

一、什么是HarmonyOS 万物互联时代应用开发的机遇、挑战和趋势 随着万物互联时代的开启&#xff0c;应用的设备底座将从几十亿手机扩展到数百亿IoT设备。全新的全场景设备体验&#xff0c;正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设…...

数据库系统概论|第五章:数据库完整性—课程笔记1

前言 在前文介绍完数据库标准语言SQL之后&#xff0c;大家已经基本上掌握了关于数据库编程的基本操作&#xff0c;那我们今天将顺承介绍关于数据库完整性的介绍&#xff0c;数据库的完整性是指数据的正确性和相容性。数据的完整性是为了防止数据库中存在不符合语义的数据&…...

开源无人机地面站QGroundControl安卓界面美化与逻辑优化实战

QGroundControl作为开源无人机地面站软件,其安卓客户端界面美化与逻辑优化是提升用户体验的重要工程。 通过Qt框架的界面重构和代码逻辑优化,可以实现视觉升级与性能提升的双重目标。本文将系统讲解QGC安卓客户端的二次开发全流程,包括开发环境搭建、界面视觉升级、多分辨率…...

工作记录 2017-12-12 + 在IIS下发布wordpress

工作记录 2017-12-12 序号 工作 相关人员 1 修改邮件上的问题。 更新RD服务器。 在IIS下发布wordpress。 郝 服务器更新 RD服务器更新了&#xff0c;更新的文件放在190的D:\Temp\CHTeam\fnehr_update_20171212\下了。 数据库更新: 数据库没有更新 更新的文件&#xf…...

BBR 之 ProbeRTT 新改

早在 1981 年&#xff0c;Jaffe 在 Flow Control Power is Nondecentralizable 中就给出过论证&#xff0c;测量 maxbw 必然引入队列&#xff0c;而获得 minrtt 时带宽必然欠载&#xff0c;这确定了后面 30 年的拥塞控制算法基调&#xff0c;但 BBR 在 35 年后非常聪明地在两者…...

[创业之路-354]:农业文明到智能纪元:四次工业革命下的人类迁徙与价值重构

农业文明到智能纪元&#xff1a;四次工业革命下的人类迁徙与价值重构 从游牧到定居&#xff0c;从蒸汽轰鸣到算法洪流&#xff0c;人类文明的每一次跨越都伴随着生产关系的剧烈震荡。四次工业革命的浪潮不仅重塑了物质世界的生产方式&#xff0c;更将人类推向了身份认同与存在…...

敏感词 v0.25.0 新特性之 wordCheck 策略支持用户自定义

开源项目 敏感词核心 https://github.com/houbb/sensitive-word 敏感词控台 https://github.com/houbb/sensitive-word-admin 版本特性 大家好&#xff0c;我是老马。 敏感词一开始了内置了多种检验策略&#xff0c;但是很多用户在使用的过程中希望可以自定义策略。 所以 v0…...

从0到上线,CodeBuddy 如何帮我快速构建旅游 App?

引言 腾讯云AI代码助手之前就改成了CodeBuddy我相信这也是在为后期做准备。那么这篇文章会对CodeBuddy进行比较详细的介绍&#xff0c;并一起来上手实战&#xff0c;感受一下实际开发中这款插件能带给我们多少的便利。本篇文章是一边写一边进行测试&#xff0c;并不是测试完之…...

微信小程序 自定义组件 标签管理

环境 小程序环境&#xff1a; 微信开发者工具&#xff1a;RC 1.06.2503281 win32-x64 基础运行库&#xff1a;3.8.1 概述 基础功能 标签增删改查&#xff1a;支持添加/删除单个标签、批量删除、重置默认标签 数据展示&#xff1a;通过对话框展示结构化数据并支持复制 动…...

从 Eclipse Papyrus / XText 转向.NET —— SCADE MBD技术的演化

从KPN[1]的萌芽开始&#xff0c;到SCADE的推出[2]&#xff0c;再到Scade 6的技术更迭[3]&#xff0c;SCADE 基于模型的开发技术已经历许多。现在&#xff0c;Scade One 已开启全新的探索 —— 从 Eclipse Papyrus / XText 转向.NET 8跨平台应用。 [1]: KPN, Kahn进程网络 (197…...

【学习笔记】机器学习(Machine Learning) | 第五章(2)| 分类与逻辑回归

机器学习&#xff08;Machine Learning&#xff09; 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习&#xff08;Machine Learning&#xff09;简要声明 二、决策边界决策边界的数学表达线性决策边界示例非线性决策边界非线性决策边界的示例…...

python 常用web开发框架及使用示例

Python常用Web开发框架及使用示例 Python拥有丰富的Web开发框架生态系统&#xff0c;以下是主流框架及其使用示例&#xff1a; 一、Flask - 轻量级框架 安装 pip install flask 基础示例 from flask import Flask, request, jsonifyapp Flask(__name__)app.route(/) def…...

[ Qt ] | 第一个Qt程序

1. 创建Qt项目 我们打开Qt Create工具&#xff0c;左上角“文件”&#xff0c;新建文件。 --- --- --- --- 这个是我们的APP“走出国门”的时候&#xff0c;要关注的&#xff0c;这里就不说了。 后面这两个直接默认&#xff0c;下一步就行~~。 2. 项目默认内容 下面就是Qt C…...

react + antd 实现后台管理系统

文章目录 完整路由搭建Layout 和 Aside组件引入 AntdAside组件实现 项目效果图 项目完整代码地址 https://gitee.com/lyh1999/react-back-management 项目完整代码地址 react依赖安装 最好采用yarn 安装 react-router 安装依赖 配置路由 history模式 / // src/router/…...

vue3+ts项目 配置vue-router

安装vue-router pnpm install vue-router配置 1.src/router/index.ts文件下的内容 import type { App } from vue import type { RouteRecordRaw } from vue-router import { createRouter, createWebHistory } from vue-router import remainingRouter from ./modules/remai…...

MySQL基本查询(二)

文章目录 UpdateDelete插入查询结果&#xff08;select insert&#xff09;聚合函数分组聚合统计 Update 1. 语法&#xff1a; set后面加列属性或者表达式 UPDATE table_name SET column expr [, column expr …][WHERE …] [ORDER BY …] [LIMIT …] 案例 将孙悟空同学的…...

MySQL:联合查询

目录 一、笛卡尔积 ​二、内连接 三、外连接 &#xff08;1&#xff09;左外连接 &#xff08;2&#xff09;右外连接 &#xff08;3&#xff09;全外连接 四、自连接 五、子查询 &#xff08;1&#xff09;单行子查询 &#xff08;2&#xff09;多行子查询 &…...

[算法学习]——通过RMQ与dfs序实现O(1)求LCA(含封装板子)

每周五篇博客&#xff1a;&#xff08;3/5&#xff09; 碎碎念 其实不是我想多水一篇博客&#xff0c;本来这篇是欧拉序的博客&#xff0c;结果dfs序也是可以O1求lca的&#xff0c;而且常数更优&#xff0c;结果就变成这样了。。。 前置知识 [算法学习]——dfs序 思想 分…...

复刻低成本机械臂 SO-ARM100 舵机配置篇(WSL)

视频讲解&#xff1a; 复刻低成本机械臂 SO-ARM100 舵机配置篇&#xff08;WSL&#xff09; 飞特舵机 组装之前需要配置舵机的ID&#xff0c;如下的网址为舵机的资料&#xff0c;实际上用不到&#xff0c;但可以mark在这里 Software-深圳飞特模型有限公司 User Guide里面可以…...

聊一聊接口测试更侧重于哪方面的验证

目录 一、功能性验证 输入与输出正确性 参数校验 业务逻辑覆盖 二、数据一致性验证 数据格式规范 数据完整性 数据类型与范围 三、异常场景验证 容错能力测试 边界条件覆盖 错误码与信息清晰度 四、安全与权限验证 身份认证 数据安全 防攻击能力 五、性能与可…...

【网络安全实验】SSL协议的应用

目录 一、SSL协议介绍 2.功能与特点 1&#xff09;数据加密 2&#xff09;身份验证 3&#xff09;数据完整性校验 3.SSL的工作流程&#xff08;握手过程&#xff09; 1&#xff09;客户端问候&#xff08;ClientHello&#xff09; 2&#xff09;服务器响应&#xff08;…...