MySQL中的sql语句执行过程

详细描述一条 SQL 语句在 MySQL中的执行过程 一条 SQL 语句在 MySQL 中的执行流程涉及多个关键步骤,从解析、优化到执行,最终返回结果。优化查询时,应充分利用索引、减少。接下来,我们以一条 SQL 语句为例,详细描述其在 MySQL 中的执行过程。MySQL 需要解析 SQL 语句,确保语法正确,并理解其含义。访问存储引擎(InnoDB/MyISAM)获取数据。,并选择执行效率最高的方案。,让 SQL 运行更高效。优化器会评估不同方案的。 阅读详情

MySQL的基本结构

大致结构

Server层

有以下组件

连接器

在客户端登录Mysql时进行身份认证和权限确认

缓存

在进行select语句时,会优先查询的区域,同时在发现查询不到时会从表中查询并缓存到这个组件。顾名思义。

分析器

准确的说是语义分析器,即分析sql语句是否正确

优化器

优化sql语句到底层最优的方式从而执行sql语句,比如如何选择索引,如何联表,但只是理论最优,不一定是实际最优。

执行器

执行语句并从存储引擎层获取数据返回,与引擎交互的层。

binlog

熟悉的都知道,日志模块,记录日志

Server层主要实现了存储过程、触发器、视图、函数等功能。

存储引擎层

简单说就是负责数据的读和写,可以替换,有很多类型的存储引擎,默认情况下为InnoDB,比较常用的还有MyISAM、Memory等多个存储引擎。

MyISAM

不支持事务和行级锁,因此不支持并发事务,而且无法保证可用性,容错性很差。但是也有可取之处,比如全文索引、压缩、空间函数等,性能很好。

InnoDB

支持行级锁,支持事务,外键等功能,具有安全回滚的能力。
同时也支持MVCC:可以使用乐观锁和悲观锁来实现。只在读取已提交和可重复读两个隔离级别下工作。(数据库事务四个隔离级别,读取未提交,读取已提交,可重复读,可串行化)
效率上则未必比MyISAM弱,要看具体的实际场景。

两者在索引方面的区别

两者都使用的B+树(可自行查询),MyISAM引擎的叶节点data域存放数据的地址。被称为非聚簇索引。InnoDB数据文件本身是索引文件,索引文件和数据文件分离,树的叶节点data域保存了完整的数据记录,数据文件本身是主索引,而数据表主键则是索引的键值,被称为聚簇索引。

实例分析

大的来分,sql语句不外乎两种,查询与修改,因为增删改都可以算是修改。

查询语句

举个简单例子如下

select * from student Tate where Tate.sex='M' and Tate.num=1;

执行流程如下:

  1. 检查权限。若无则报错,若正确则下一步
  2. 查询缓存(8.0及更高不再查询)。如果有则直接返回,若无,继续下一步。
  3. 进入分析器分析词法,提取出语句中的操作,先找到select确认为查询操作,后找到from后的表名student进行查询,然后判断是否存在语法问题,若有则报错,无则继续下一步。
  4. 这就到了优化器的层面,确认理论最优的查询方案,比如这条语句,我们有两种做法,把性别=M的全部找出来再找num=1的或是把num=1的先找出来再找性别M的(再者也有联表顺序之类的语句也会有不同的执行过程)通过内部的相关算法选择理论上认为最优的过程进行执行操作,然后进入下一步
  5. 接下去再次进行权限检查去调用底层的存储引擎提供的相关接口,然后返回结果。

修改语句

同样举个例子

update student Tate set Tate.money=10000 where Tate.num=1;

和查询不一样,这里面主要涉及数据的修改,为了数据库的安全回复,这里就要用到上面提到的binlog组件,也就是日志组件,当然引擎也存在相应的日志组件。
具体过程如下:

  1. 查询num=1的所有数据(与查询语句类似)
  2. 根据查询语句修改money字段,调用引擎接口保存数据,在引擎的日志模块中记录,并返回执行器信号,记录此时处于“准备”阶段(还未commit)
  3. 执行器收到信号后将操作记录到binlog日志组件中,然后再次调用引擎接口,设置引擎的日志模块中这条日志为commit状态。

异常处理

因为两个日志的存在会引发很多问题。

为什么存在两个日志

首先先弄清楚这个问题,其实是可以不存在两个日志的,这应该算是个版本更新的问题,5.5之前版本Mysql采用的是MyISAM引擎,而上面提到了,这个是不存在日志模块的,而InnoDB是存在的,名字叫redo log。

极端情况

redo log正在准备阶段,但是binlog写完还未调用引擎接口的时候宕机了,造成数据的不一致。

解决方法

重启之后Mysql会对redolog进行检查,如果发现是commit状态,就提交事务。
如果发现是准备阶段,那就再去判断binlog是否已经存在完整的记录,如果是则修改redolog为commit,如果不是则进行回滚,重新执行事务。

HI3516CV610海思SOC:超高清智慧视觉开发全攻略 本文全面解析海思HI3516CV610 SOC在超高清智慧视觉开发中的应用。该芯片集成双核A7处理器、1Tops NPU、AI ISP及4K视频编码器,专为智能摄像头设计。文章详细介绍了开发环境搭建、核心硬件架构、媒体处理平台(MPP)实战、AI算法集成与系统调优等全流程攻略,帮助开发者高效构建稳定可靠的视觉AI产品。 阅读详情

相关推荐

FreeRTOS笔记(十五)FreeRTOS总结

文章目录01 - 裸机和FreeRTOS区别1.1 - 裸机1.2 - FreeRTOS1.3 - 区别02 - 对FreeRTOS的感受03 - 推荐 上一文链接:FreeRTOS笔记(十四)[简] 软件定时器、事件组、任务通知 01 - 裸机和FreeRTOS区别   学完FreeRTOS,应该要自己总结一下FreeRTOS和裸机的区别,宏观上说,FreeRTOS是一个运行在裸机上的微内核,...

单眼皮根号三的博客 4113

MYSQL高级(架构篇)——SQL的执行过程

MySQL是典型的C/S架构,服务器端采用mysqld。。

zhuhaotian1003的博客 1215

CFturbo 2024保姆级教程:从流量扬程到三维叶轮,手把手搞定离心泵水力设计

本文提供CFturbo 2024离心泵水力设计的全流程实战指南,从流量扬程参数输入到三维叶轮模型导出,详细解析设计步骤与优化技巧。涵盖叶轮尺寸确定、子午面型线设计、叶片角度调整等关键环节,帮助工程师高效完成CAE辅助的离心泵水力设计,提升设计质量与效率。

weixin_42569329的博客 922

MySQL innodb中一条sql的执行流程

在 MySQL InnoDB 存储引擎中,执行一条 SQL 语句的流程涉及多个模块的协作。下面是一个详细的讲解,包括 SQL 查询从接收、解析、优化、执行到结果返回的完整过程。一条 SQL 的执行流程可以分为以下几个主要阶段:接收 SQL:解析器(Parser):预处理(Preprocessor):MySQL 使用查询优化器生成高效的执行计划。查询重写:生成候选执行计划:选择最优计划:优化器确定了执行计划后,会将其交给执行器。InnoDB 作为 MySQL 的存储引擎,负责管理表数据的存储和读取。索引管理:

error_log7的博客 989

拉曼光谱入门:7.拉曼光谱仪光学系统结构详解

本文系统拆解了拉曼光谱仪从激光器输出经聚焦照明、二向色镜/陷波滤光片组滤除瑞丽散射、衍射光栅色散至CCD探测的完整光路,阐述了各光学模块在微弱非弹性散射信号提取、杂散光抑制及高分辨光谱成像中的工程原理与技术参数要求。

qq_53529450的博客 223

纯方位观测下的三维定位,IV-PLKF(Inverse Velocity-Weighted Pseudo-Linear Kalman Filter)

在现代定位系统中,纯方位观测因其无需测距设备的优势,在无线通信、无人机导航和室内定位等领域备受关注。本文深入探讨基于算法的三维定位方法,并提供完整的MATLAB仿真例程。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 672

SQL 执行的流程

一条 SQL 从客户端发出后,会经过连接层校验身份、SQL 解析、生成执行计划,执行器调用存储引擎层(如 InnoDB)读取数据,最终返回结果给客户端。执行过程中可能涉及索引查找、Buffer Pool、事务日志(redo/undo)、MVCC 等关键模块。

m0_69529796的博客 609

【DRAM存储器六十五】DDR5介绍--训练相关之MPC、Read Training Pattern、Read Preamble Training Mode

简述DDR5 MPC操作和读训练时颗粒输出pattern的配置

highman110的博客 361

mysql中INNODB索引的执行全过程详解

mysql中INNODB索引的执行全过程详解

向上的"狼"的博客 1968

Palantir如何利用Ontology构建企业级数据地图

Palantir通过"本体论"(Ontology)技术构建动态数据地图,将多源异构数据转化为可操作的业务知识网络。该技术突破传统ETL模式,建立覆盖全组织的语义层,将原始数据映射为"客户""订单"等业务对象及其关联关系,形成可推理的语义网络。核心Foundry平台提供本体管理工具(OMA)和开发套件(OSDK),支持从数据连接到应用开发的全流程。虽然采用专有实现而非标准本体语言,但该架构成功解决了数据孤岛问题,赋能复杂决策分析

Learning 1788

智能门禁:AI Agent的访客意图识别

随着人工智能技术的飞速发展,智能门禁系统已经成为现代安全管理的关键环节。本文深入探讨了AI Agent在访客意图识别中的应用,通过详细的分析和实例讲解,揭示了智能门禁系统的核心工作原理、算法实现及其在安全领域的重要作用。文章结构清晰,逻辑严谨,旨在为广大技术爱好者提供一次全面的技术盛宴。在当今社会,门禁系统已成为各类建筑和机构不可或缺的安全设施。随着信息安全意识的增强,传统门禁系统的局限性逐渐显现。例如,在访客管理方面,传统方法通常依赖于人工登记、身份验证等手段,不仅效率低下,而且容易出现漏洞。

AI架构师小马 707

面试官:你说说一条更新SQL的执行过程?

在上一篇《面试官:你说说一条查询SQL的执行过程?》中描述了Mysql的架构分层,通过解析器、优化器和执行引擎完成一条SQL查询的过程,那这一篇续上继续说明一条更新SQL的执行过程。对于一...

艾小仙的专栏 726

全国青少年信息素养大赛图形化(Scratch)编程考点总结

全国青少年信息素养大赛图形化(Scratch)编程考点总结

伶俐角少儿编程 382

详解Mysql的一条sql语句的执行过程

详解MYSQL的SQL语句执行过程

m0_66220639的博客 1840

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySQL 中 SQL 语句的详细执行过程

当一条 SQL 语句在 MySQL 中执行时,它会经历多个阶段的处理。

篱笆院的狗的博客 1940

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SQL 语句在 MySQL 中的执行过程

连接层:负责与客户端建立连接,接收客户端发送的 SQL 语句。服务层:包括查询缓存、解析器、预处理器、优化器等组件,负责对 SQL 语句进行解析、优化等操作。存储引擎层:负责实际的数据存储和检索,不同的存储引擎具有不同的特点和性能。文件系统层:存储数据文件和日志文件等。

SOS5418818845的博客 1069

一条SQL语句在MySQL中执行过程全解析

本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的。

ratel的博客 3万+

MySQL一条SQL语句的执行过程

MySQL一条SQL语句的执行过程涉及多个组件,包括连接器、查询缓存、解析器、预处理器、优化器、执行器和存储引擎。理解这些组件的工作原理,对于性能优化、故障排查和安全加固至关重要。通过本文的讲解,希望你能够更深入地理解MySQL的内部机制,并在实际工作中应用这些知识,提升数据库操作的效率和安全性。如果你有任何问题或需要进一步的帮助,请在评论区留言,我会尽力为你解答。

xycxycooo的博客 891

MySQL中SQL语句的详细执行过程

外连接转内连接:当WHERE条件包含被驱动表非空约束时。Extra:额外信息(如Using filesort)read_rnd_buffer_size:随机读缓冲区。redo log:物理日志,保证持久性(WAL机制)记录慢查询(如超过long_query_time)连接算法选择(嵌套循环、哈希连接、排序合并)InnoDB行锁:共享锁(S)、排他锁(X)更新Buffer Pool中的数据页(脏页)sort_buffer_size:排序缓冲区。join_buffer_size:连接缓冲区。

Uzumaki_Naruto12的博客 939

mysql执行一条sql语句的完整过程,sql语句在mysql中的执行过程

一条更新语句完整流程图如下所示: 步骤: 一:客户端层 ①:mysql的客户端执行sql update t set name = ‘zhuge666’ where id = 1; id为1的name原来的值是zhuge。 二:mysql服务器层 ②: 进入mysql服务器,由连接器验证账号密码等身份信息,验证通过去查mysql缓存,如果有,直接返回。没有进入分析器。 ③:进入mysql的分析器,分析sql语句是否符合mysql规范。 ④:进入sql优化器,mysql底层优化sql,比如调换索引列等。 ⑤:

qq_1149513559的博客 2127

8. 详细描述一条 SQL 语句在 MySQL 中的执行过程。

如果查询缓存中已经存在相同的SQL语句,并且结果集也是最新的,那么MySQL直接返回缓存中的结果集,跳过后续的执行步骤。一条SQL语句在MySQL中的执行过程涉及多个阶段,包括SQL解析、查询优化、执行计划生成、SQL执行和结果返回。一条SQL语句在MySQL中的执行过程包括多个步骤,从接收到SQL命令到返回结果,这些步骤涉及SQL解析、优化、执行以及最终的结果返回。:MySQL的存储引擎负责实际的数据存储和检索。:MySQL在执行完SQL语句后,会释放在解析、优化和执行过程中占用的资源,如内存、锁等。

zhzjn的博客 1643

Mysql高频八股——SQL语句的执行过程

今天这篇文章本来想把**SQL语句的执行过程**和**事务与undo log、redo log的联系**放在一起写的。SQL语句的执行过程中会涉及到undo log、redo log,而undo log、redo log更深入的原理也是面试中经常会问到的,所以把它们放在一起再合适不过了,但是写着写着发现内容太多,于是拆成了两篇。

weixin_49426115的博客 862

MySQL 一条 SQL 语句的完整执行过程详解

MySQL SQL语句执行过程详解:从客户端请求到结果返回,经历驱动连接、服务器线程处理、SQL解析、优化器生成执行计划、执行器调用存储引擎接口等阶段。InnoDB引擎通过Buffer Pool缓存数据,结合undo/redo日志实现事务特性,并与binlog协作确保数据一致性。关键优化点包括连接池配置、SQL编写规范、索引使用和事务控制。了解完整流程有助于编写高效SQL和性能调优。

weixin_39956506的博客 785

SQL语句在MySQL中的执行过程

MySQL基础架构分析摘要 MySQL采用分层架构,分为Server层和存储引擎层。Server层包含连接器、查询缓存(8.0移除)、分析器、优化器和执行器等组件,负责身份认证、SQL解析、优化和执行等核心功能。存储引擎层采用插件式架构,支持InnoDB、MyISAM等引擎,负责数据存储。 查询语句执行流程:权限检查→分析器→优化器→执行器→引擎。更新语句引入了日志模块,采用redolog(InnoDB特有)和binlog双重日志机制,通过两阶段提交保证数据一致性。关键区别在于更新流程包含redolog的p

持续更新中!!! 916

SQL语句在MySQL的执行过程

先对MySQL的一些基础组件进行简单的介绍1.连接器:身份认证和权限相关。2.查询缓存:执行查询语句时,会先查询缓存(MySQL8.0版本后移除)。3.分析器:词法分析和语法分析,词法分析即对一条SQL语句中的关键字进行提取,如select、insert、update、表名、字段名等等,语法分析即查看SQL语句是否有语法错误。4.优化器:根据MySQL内部的优化算法按照最优方案执行SQL。5.执行器:执行语句,然后从存储引擎返回数据。MySQL主要分为server层和存储引擎层。

2301_82014959的博客 1257

详细描述一下一条SQL语句在MySQL中的执行过程

详细描述一下一条SQL语句在MySQL中的执行过程

qq_30939943的博客 1433
上一篇: HashMap超详解
下一篇: Java中List对象中clear()方法和List=null方法来清空List的异同(由一道算法题发现)
Tate_Brown
博客等级 码龄9年 39粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值