从查询语句执行流程看MySQL架构

离线路径规划服务Graphhopper 离线路径规划服务Graphhopper 本文主要探索使用Graphhopper搭建离线路径规划服务,需要掌握一定的JAVA基础环境配置的知识 文章目录离线路径规划服务Graphhopper前言一、Graphhopper是什么?二、使用步骤1.下载Graphhopper2.从OpenStreetMap下载路图数据3.安装Graphhopper所需环境4.修改配置5.启动Graphhopper总结 前言 在外网环境中可以使用百度、高德等第三方的sdk用以实现路径规划的功能,由于项目的需要,在离线环境中需要使 阅读详情

前言

常言道,看待一个事情要先知全貌,从高维度认识、理解,然后再深入各个细节,一一击破。MySQL的学习也不例外,那么你知道一条SQL在MySQL中执行要经历哪些步骤吗?每个步骤都有MySQL的哪些“零件”参与吗?如果不清楚的话,可以阅读本文。

SQL执行流程

在MySQL客户端或者JAVA应用程序中查询一条最简单的语句比如select * from T where ID =10;你知道经历哪些步骤吗?

连接

你要执行查询语句前肯定要先和MySQL建立连接啊,那怎么建立连接呢?

可以通过下面的命令:

mysql -h ip -P port -u$user -p 复制代码
  • 经过三次握手建立连接成功后, 验证客户端传来的连接用户名和密码,并不是任何阿猫阿狗都可以连啊

  • 如果用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行

  • 用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依赖于此时读到的权限

这个用于连接的“零件”就是MySQL的连接器,它主要负责跟客户端建立连接、获取权限、维持和管理连接。

查缓存

现在连接建立好了,相当于客户端和MySQL服务端的“传输管道”有了,开始查数据了。

都说性能不够,缓存来凑,MySQL“为了性能”,也实现了查询缓存。

  • MySQL以查询的语句作为key去查询缓存中获取对应的value

  • 如果没有的话,会去做真实的查询

  • 如果有的话,直接返回缓存中的数据

  • 如果这个表发生更新,查询缓存会清空

所以关键点在于MySQL表的更新频率以及缓存的命中率,我们可以根据下面命令查看监控查询缓存:

show status like '%Qcache%'; 复制代码

  • Qcache_hits: 表示有 多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。

  • Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这也正常。

这上面一个过程就是MySQL的查询缓存操作。

但是实际情况是查询缓存往往弊大于利,因为查询缓存的失效非常频繁,一般建议大家在静态表里使用查询缓存。但是在MySQL 8.0中已经去掉了查询缓存。

分析验证

如果没有命中查询缓存,就要开始真正去查了。在查询前,MySQL肯定要“理解”你这条SQL语句啊,所以要有个“零件”去分析验证你的SQL语句,那究竟是怎么个分析过程呢?

  1. 词法分析, 你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面 的字符串分别是什么,代表什么。

  2. 语法分析,根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个SQL语句是否满足 MySQL语法。

这也是为什么我们的SQL语句存在语法问题的时候会报错,就是这个叫做分析器的零件报出来的。

优化

语法没问题,就够了吗?当然不够,智能的MySQL还要帮我们做优化,那都做哪方面的优化呢?

  1. 比如有多个索引的时候,智能选择一个它认为最佳的索引

  2. 多表关联的时候,决定表的连接顺序

  3. 对子查询进行优化

  4. 对连接语义进行了外连接消除、嵌套连接消除....

这个过程就是由MySQL的优化器做的。

执行

优化器阶段完成后,这个语句的执行方案就确定下来了,然后真正的开始执行了。

在执行之前需要判断该用户是否具备权限 。如果没有,就会返回权限错误。如果具备权限,就执行 SQL 查询并返回结果。

我们以一开始的查询语句select * from T where ID =10;为例,ID没有索引,并且采用的innoDB作为存储引擎,整体查询的流程如下:

  • 调用 InnoDB 存储引擎接口取这个表的第一行,判断 ID 值是不是1

  • 如果不是则跳过

  • 如果是则将这行存在结果集中

  • 调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。

上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户,这一个过程就是由MySQL的执行器执行的。

MySQL逻辑架构

上面讲解了查询语句的真个执行流程,涉及了MySQL的各个“零件”,我们将这些零件组装组装,可以形成下面的逻辑架构图:

​大体来说,MySQL可以分为Server层和存储引擎层两部分。

  • Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

  • 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。所有的存储引擎都共用同一个Server层。

总结

本文通过以一个查询语句的执行流程为例,讲解了MySQL整体的逻辑架构,对MySQL的各个部分有了一个全局的认知。这样,在遇到问题的时候,也比较有针对性,比如对于一个select * from T where k=1,报了Unknown column ‘k’ in ‘where clause’的错误,我们就很快的知道是分析器报出来的,因为分析器会分析我们SQL的语法。

OpenBCI脑电实验避坑指南:如何用Python准确捕捉P300信号 本文详细介绍了使用OpenBCI和Python进行P300脑电信号实验的避坑指南,包括电极贴放、信号采集、信号处理和数据分析等关键步骤。通过实战经验和代码示例,帮助研究者避开常见陷阱,提高P300信号捕捉的准确率,适用于脑机接口和神经科学研究。 阅读详情

相关推荐

零基础微信理财通基金实操指南(2026版)

先活下来:保证不亏大钱,再想赚钱慢慢变富:年化10%,7年翻倍,这已经很好了开始比完美重要:今天先存100元到零钱通,就是最好的开始现在打开微信,进入理财通,完成第一步风险测评吧!有任何问题可以随时问,我会用最通俗的方式解释。

老韩的Linux云计算架构师进阶之路 1693

MySQL的架构及查询sql的执行流程(一)

目录`mysql` 的整体架构`Server` 层存储引擎层 mysql 的整体架构 Server 层 大多数 mysql 核心服务都位于这一层,主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数(如日期、时间、数学和加密函数等)等,还有一个通用的日志模块 binglog 日志模块。不同的存储引擎共用一个 Server 层 存储引擎层 主要负责数据的存储和提取。其架构模式是插件式的,包括 InnoDB、MyISAM、Memory 等多个

桐花思雨 296

实测对比:DECIMER、Img2Mol、MolScribe,哪个化学结构识别工具更靠谱?

化学结构识别(CSR)工具的核心任务是将分子结构图像转换为SMILES(Simplified Molecular Input Line Entry System)表示。这一过程需要克服图像质量差异、绘制风格变化以及特殊基团识别等挑战。三款工具采用不同的技术路线:DECIMER:基于EfficientNetV2+Transformer架构,优势在于处理标准期刊文献中的分子图示Img2Mol。

weixin_32576389的博客 348

查询MySQL数据库中表结构的几种方法

什么是表结构? 表结构就是定义数据表文件名,确定数据表包含哪些字段,各字段的字段名、字段类型、及宽度,并将这些数据输入到计算机当中。查询方法:

菜鸟Li 13万+

AI赋能运筹优化:从参数生成到智能求解的工程实践

运筹学通过线性规划、整数规划等数学模型,为供应链、物流、生产排程等复杂决策问题寻找最优解,其核心价值在于提升资源利用效率与决策科学性。传统方法依赖精确的输入参数与专家经验,面临数据不准、建模门槛高、求解调优难等挑战。人工智能技术的引入,正从原理层面重塑这一流程:通过深度学习模型生成更贴合现实的动态参数(如需求分布、行驶时间),利用自然语言处理降低建模门槛,并借助强化学习对求解器进行智能参数调优。这种AI与运筹学的融合,在工程实践中显著提升了优化系统的自适应能力与求解效率,使其在应对实时交通、柔性生产调度等动

weixin_26913055的博客 595

全志T527-TP9930-Camera

TP9930 驱动模块主要实现将 4 路的 AHD/TVI/CVBS Camera 的数据转换为 BT656/BT1120 数据,从而实现在 T527 端来对数据进行处理和送显。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3245

(一)MySQL体系架构

(一)MySQL体系架构 目录 一、MySQL体系结构 二、MySQL内存结构 三、MySQL文件结构 四、Innodb体系结构 1.MySQL体系结构 由图,可以看出MySQL最上层是连接组件。下面服务器是由连接池、管理工具和服务、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。 连接池:由于每次建立建立需要消耗很多时间,连接池的作用就是将这些连接缓存下来,下次可以直接用已经建立好...

小虎的博客 1万+

C++(Qt)软件调试---Windows下Qt使用dump定位崩溃位置(1)

在C++/Qt程序崩溃时,往往很难找到崩溃的原因,如果是稳定复现的问题还好,但是多数情况遇见的问题是随机出现的,这时想要快速找到问题并解决就需要通过dump文件定位崩溃位置。

mahuifa的博客 1万+

MySQL架构图解

这个博客记录了MySQL 5.7的物理和逻辑架构,还有其组件。在这个帖子中,我会尝试用图去说明SQL语句的执行流程和数据处理流程。MySQL的架构具备灵活性,因为它把不同的存储引擎作为插件。因此,MySQL的架构和行为也会随着存储引擎的改变而改变。 我们重点讨论InnoDB,因为它是MySQL的默认存储引擎。 MySQL物理架构 配置文件 auto.cnf : 包含 server_uuid ...

oneslide 3万+

【无人机路径规划】基于强化学习实现多无人机路径规划

【无人机路径规划】基于强化学习实现多无人机路径规划

k8291121的博客 1659

上位机介绍:C# 开发者的必知基础

上位机是指在工业控制系统中,位于上层、负责人机交互和数据管理的计算机/软件,与“下位机”(PLC、传感器、变频器、单片机等硬件设备)相对应,核心是“向下通信控制设备,向上展示交互数据”。下位机:一线干活的“工人”(执行采集、控制指令);上位机:指挥管理的“办公室人员”(发指令、看数据、做报表)。C#开发者掌握上位机开发的核心是“通信+UI+稳定性基础层:搞懂WinForms/WPF基础、串口/Modbus通信,能实现核心功能;进阶层:掌握分层设计、异步编程、工业级容错(断线重连、数据校验);

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1561

【MySQL】MySQL的基础架构及查询语句的执行流程

1、MySQL的架构组成 总体来说,MySQL可以分为Server层和存储引擎层。 Server层包括连接器、查询缓存、分析器、优化器、执行器等部分,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图(指虚拟表视图)等。该部分涵盖了MySQL的大多数核心功能,以及所有的内置函数。 存储引擎层负责数据的存储和提取,采用插件式架构,支持InnoDB、MyISAM、Memory等多个储存引擎...

木同的小心情 288

化工设计软件:AVEVA E3D二次开发_(8).管道系统设计

在 AVEVA E3D Design 中,管道规格的定义是确保设计一致性和标准化的关键。通过二次开发,可以自动生成并管理管道规格。下面是一个示例,展示如何通过编写脚本来定义和管理管道规格。# 导入必要的库 import clr。

kkchenjj的博客 983

【MySQL数据库原理 一】MySQL架构及查询语句执行流程

首先了解下MySQL的内部存储机制,其实我们可以把常用工具MySql workbench当做是客户端,而MySQL是服务器,结合计算机网络里学习的内容,我们可以理解为两个应用程序在通信,也就是局域网内的CS架构。 MySQL架构 客户端依据通信协议请求服务端,而MySQL这个服务器执行SQL语句命令并给出反馈,整体架构如下: 可以粗略的把MySQL服务器分为两层,上面的为Server层,主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数

MaoLin Tian's Blog 906

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【MySQL面试通关】Chapter 1:MySQL架构和SQL查询语句的执行流程

MySQL面试通关之MySQL架构和SQL查询语句的执行流程

L1ghtn1nggggg的博客 304

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MySQL基础架构之查询语句执行流程

这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的。 比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条语句执行流程之前,我们看看mysql的基础架构。 图来自极客时间的mysql实践,该图是描述的是MySQL的逻辑架构。 server层包括连接器、查询缓存、分析器、优化器、执行器涵盖 M...

188

Mysql逻辑架构,Sql查询语句执行流程,更新语句更新流程

Mysql 逻辑架构 优化器:优化:比如如果数据量比较少的时候,虽然可以走二级索引,但是二级索引还有回表,速度还不如进行聚簇索引的扫描,这时优化器就就会优化一下不走二级索引了 一条SQL查询语句是如何执行的? 一条SQL查询语句是如何执行的? 连接器:TCP连接,权限(查出当前用户拥有的权限) 查询缓存:命中直接返回;在8.0版本后去除查询缓存了 分析器: SQL 解析、分析语法是否正确,预处理,生成合法的解析树 优化器:优化器生成对应的执行计划 执行器:根据执行计划,调用对应的存储引擎的 API 来执

Yian_Tp的博客 927

【MySQL架构】深度解析:一条SQL查询语句在InnoDB中的完整执行流程

- 1. 客户端发送查询-- 2. 连接器验证身份和权限-- 3. 分析器进行词法分析和语法分析-- 4. 优化器生成执行计划(基于成本模型)-- 5. 执行器调用存储引擎接口-- 6. InnoDB通过Buffer Pool访问数据-- 7. 数据返回给客户端-- 验证整个流程的耗时分布SELECTUNION ALLSELECT 'Parser', 0.001 -- 解析耗时(秒)UNION ALLSELECT 'Optimizer', 0.005 -- 优化耗时。

持续输出Java相关知识 1202

mysql服务器查询语句_MySQL 服务端整体架构和 SQL 查询语句的执行流程

MySQL 数据库客户端成功建立与服务端的连接和并完成用户认证后,就可以发送 SQL 语句与服务端交互了:接下来,我们一起来探究当客户端发送一个 SQL 查询语句后,服务端都做了哪些操作,将最终结果返回给客户端。服务端整体架构开始之前,我们先来看看 MySQL 服务端的整体架构:可以看到服务端主要由 Server 层和存储引擎两部分组成:Server 层包括连接器、查询缓存、分析器、优化器、执行器...

weixin_34596480的博客 149

MySQL中 SELECT 语句执行流程详解

MySQL中 SELECT 语句执行流程

sorrty00的博客 1366

讲mysql执行流程书籍_MySQL 基础架构 1. 一条SQL查询语句的执行过程(个人学习笔记)...

MySQL的逻辑架构图;MySQL 大体分为 “server 层” 和 “存储引擎层” 两部分;Server 层包括 连接器、查询缓存、分析器、优化器、执行器 等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(日期,时间,数学,加密函数等),所有夸存储引擎的功能都可以在这一层实现,例如:存储过程,触发器,视图等;存储引擎层负责数据的存储和提取,使用插件式的架构模式;支持 InnoDB、M...

weixin_34820733的博客 127

SQL学习笔记(一):SQL语句是如何在MySQL中执行的

一.MySQL 的逻辑架构图 Server 层包括连接器、查询缓存、分析器、优化器、执行器,涵盖MySQL的大多数核心服务功能,以及所有的内置函数,包括日期,时间,数学,函数等。所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB,Memory 等多个存储引擎。 二.查询...

weixin_41993767的博客 251

【MySQL】简单解析一条SQL查询语句的执行过程

在实际应用场景中,由于建立连接的过程相对复杂,会消耗一定资源,因此建议尽量减少连接的建立次数,优先采用长连接。但长连接可能引发内存问题,因为 MySQL 在执行过程中临时使用的内存由连接对象管理,若连接持续不关闭,这些内存资源无法释放,可能导致内存占用过高,甚至引发系统强制终止 MySQL 进程(OOM),表现为 MySQL 异常重启。以表 T 中 ID 字段无索引为例,执行器首先调用 InnoDB 引擎接口获取表的第一行数据,判断该行的 ID 值是否为 10,若不是则跳过该行,若是则将该行存入结果集。

山海守门人 2051

MySQL如何执行查询语句

1. 前言 以下对MySQL执行查询语句的主要步骤进行分析,未涉及连接优化、排序优化等内容。 2. MySQL服务器架构 在了解MySQL如何执行查询语句前,首先需要了解MySQL服务器(MySQL Server)架构。 MySQL服务器架构示意图如下所示: 图片来源: https://www.oracle.com/technetwork/articles/javase/figure2-large-145676.jpg 。 图片来源: 《High Performance MySQL, 3rd Editio

adrninistrat0r的博客 953

一条sql语句在mysql中是如何执行的

前言 最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的。在分析之前我会先带着你看看 MySQL 的基础架构,知道了 MySQL 由那些组件组成已经这些组件的作用是什么,可以帮助我们理解和解决这些问题。 一、mysql架构分析 下面是m...

weixin_33831196的博客 725
上一篇: 为什么在公司里访问不了家里的电脑?
下一篇: 带你认识什么是redis主从复制集群的原理和部署
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值