【MySQL内核】MySQL中一条 SQL语句是如何执行的?

news/2024/12/15 21:27:48/文章来源:https://www.cnblogs.com/o-O-oO/p/18608759

MySQL执行一条SQL语句,涉及到以下几个过程:

1、客户端连接

要执行 SQL 语句,首先用户需要通过客户端连接到MySQL服务器,连接时需要指定用户名和密码,MySQL服务器中的连接器模块会对用户提供的用户名和密码进行验证,并检查用户是否拥有执行特定SQL语句的权限。一个用户成功建立连接后,即使管理员对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有新建的连接才会使用新的权限设置。

2、查询缓存

如果执行的是一条查询语句,MySQL会先到查询缓存中查找之前是不是执行过这条语句,如果能在缓存中找到,就直接返回查询结果。如果找不到,就继续往下执行。需要注意的是,如果一个表经常更新,查询缓存就会被频繁清空,导致缓存的命中率非常低,所以MySQL 8.0 版本后,查询缓存的功能被删掉了。

3、解析SQL

在执行某条SQL语句之前,MySQL需要先弄懂它的含义,所以需要解析器对 SQL 语句做解析。解析器首先会对SQL语句进行词法分析,也就是将SQL语句字符串中的关键字识别出来,比如select,from等等。接着解析器再根据词法分析的结果,对SQL语句进行语法分析构建出 SQL 语法树,方便后面模块获取 SQL 类型、表名、字段名、 where 条件等等。


4、执行SQL

在正式执行SQL之前,还会经过预处理和优化两个阶段。预处理阶段,预处理器会检查 SQL 语句中的表或者字段是否存在。优化阶段,优化器负责将SQL语句的执行方案确定下来,比如在表里面有多个索引的时候,优化器会基于查询成本的考虑,来决定选择使用哪个索引。

经过优化器确定执行方案后,就由执行器真正开始执行SQL语句,执行器通过API与存储引擎交互,获取数据或对数据进行修改,并将执行结果返回给用户。

总结

MySQL执行一条SQL语句,会经过连接器处理客户端连接、查询缓存、解析器进行词法分析和语法分析生成语法树、预处理器检查表名和字段名、优化器确定最优执行计划以及最后执行器与存储引擎交互进行数据操作等多个流程。

原创 coderxiaozhi 编程十万问

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

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

相关文章

Adobe Audition 2025各版本安装包下载与安装

1、安装包 我用夸克网盘分享了「Adobe Audition 2025」 链接:下载地址 2、安装教程(安装前关闭系统防护) 1) 下载软件安装包,双击Set-up.exe安装2) 修改安装目录,点击继续3) 点击继续,提示正在安装进度4) 安装完成,点击启动5) 启动程序…

SVN 报错 | svn: E170004: Commit failed (details follow): svn: E170004: Directory xxx is out of date

问题描述 IDEA 中通过 SVN 拉取项目后进行修改,第一次 commit 提交代码的时候成功提交,第二次修改后再提交的时候报错了,提示“Directory xxx is out of date”解决方法 报错的原因是本地项目过时了,和 svn 服务器的项目版本不一致。需要先 update 更新本地的项目,再重新修…

文件保护

文件保护 ‍ ​​ ‍一、口令保护 口令一般存放在文件对应的 FCB 或索引结点中。用户访问文件前需要先输入“口令”,操作系统会将用户提供的口令与 FCB 中存储的口令进行对比,如果正确,则允许该用户访问文件。优点:保存口令的空间开销不多,验证口令的时间开销也很小 缺点:…

文件系统的全局结构(布局)

文件系统的全局结构(布局) 一、文件系统在外存中的结构 演变过程:原始磁盘(刚被生产出来)​​物理格式化(低级格式化):划分扇区,检测坏扇区,并用备用扇区替换坏扇区(骗过OS)​​磁盘分区(分卷Volume)分为C盘、D盘等逻辑格式化完成各分区的文件系统初始化 注:逻辑…

虚拟文件系统文件系统挂载(安装)

虚拟文件系统&文件系统挂载(安装) 一、虚拟文件系统 (一)普通的文件系统 先来看不存在虚拟文件系统的普通文件系统,彼此之间实现同一功能的接口具有差异,比较混乱。 ​​ ‍ (二)VFS 虚拟文件系统 Virtual File System 为解决同时使用不同文件系统需要频繁改动底层…

文件的物理结构(文件分配方式)

文件的物理结构(文件分配方式) ‍ ​​ ‍类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同。 内存与磁盘之间的数据交换(即读/写操作、磁盘 I/O )都是以“块"为单位进行的。即每次读入…

【Adobe Animate 2024下载与安装教程】

1、安装包 我用夸克网盘分享了「Animate 2024」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:下载地址2、安装教程(建议关闭杀毒软件和系统防护) 1) 下载并解压下载的安装包,右击装载2) 双击Setup.exe安装…

jsp前端页面识别不了后端传过来的model-${user.id}

调试: controller 成功接收到参数。并且给model传入数据。界面也跳转了 jsp文件中使用 ${user.id} 获取数据 但是处理的依然是 ${user.id} 而不是传入来的数据。 原因: 默认创建的web,其配置文件 web.xml文件是使用 2.3版本 <!DOCTYPE web-app PUBLIC"-//Sun Micros…

基于ESP32的桌面小屏幕实战[4]:硬件设计之PCB Layout

1. PCB Layout 步骤生成PCB确定PCB layout规范绘制板框尺寸布局 布局规范:按电气性能合理分区,一般分为:数字电路区(即怕干扰、又产生干扰)、模拟电路区(怕干扰)、功率驱动区(干扰源); 完成同一功能的电路,应尽量靠近放置,并调整各元器件以保证连线最为简洁; 对于质…

【C#脚本】C#调用Python脚本的方式(一),以PaddleOCR-GUI为例

以下文章来源于mingupup的学习记录 ,作者DotNet学习交流 前言 每种语言都有每种语言的优势,Python由于其强大的生态,很多任务通过调用包就可以实现,那么学会从C#项目中调用Python脚本完成任务就很重要。C#调用Python代码有多种方式,如果Python那边内容比较多,可以考虑起一…

Derby 数据库介绍(1)--简介

Apache Derby 是 Apache DB 的一个子项目,是一个完全用 Java 实现的开源关系数据库,采用 Apache License 2.0 许可;本文主要介绍其基本概念及安装。 1、Derby 特点 Derby 体积小——基础引擎和嵌入式 JDBC 驱动程序约 3.5MB。Derby 基于 Java、JDBC 和 SQL 标准。Derby 提供…

参数占位符 #{xx} 和 ${xx} 的区别

#{xx} :带有#{}的SQL会采用SQL预编译技术,预编译后的SQL中 #{} 被替换为 “?”,这里的 “?”叫变量占位符,在实际执行SQL时会用“xx”的实际值替换变量占位符,效率更高,可以防止SQL注入SQL预编译:MySQL执行SQL有几个步骤,“查缓存->[语法分析->优化->编译-&…