MySQL-进阶篇-基础架构:一条sql语句是如何执行的

摘自:01 | 基础架构:一条SQL查询语句是如何执行的?-MySQL实战45讲-极客时间

视频讲解:7分钟精通MySql中SQL执行原理_哔哩哔哩_bilibili

可结合学习,本文仅记录SQL语句的执行流程,以上内容有一些额外知识未做记录。


基础架构:一条sql语句的执行流程图

        MySQL可以分为 Server 层和存储引擎层两部分。
        Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
        存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB MyISAM 、Memory等多个存储引擎。现在最常用的存储引擎是 InnoDB ,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。

1. 连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接。要想执行SQL语句,首先要连接数据库,由客户端的连接驱动与数据库的连接池实现连接。

在完成TCP握手后,连接器需要验证你的身份(用户名和密码):

  • 验证失败,返回"Access denied for user"错误,客户端程序结束执行;
  • 验证成功,连接器会到权限表里面查出你拥有的权限。之后这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。

2. 查询缓存(MySQL8.0版本以完全删除)

可不看,MySQL8.0版本以完全删除该功能。为了序号与图示对应写一写。

过去执行过的SQL语句和它的结果以键值对的形式缓存在内存里。如果SQL语句能够在缓存中找到,直接返回它对应的value-结果;如果找不到,继续后续的操作。

缺点:

  • 缓存查找慢
  • 新建缓存消耗
  • 批量失效(只要有对表的更新,与该表相关的所有语句都会失效,很频繁)

3. 解析器(词法分析、语法分析-SQL语句要做什么?)

  • 词法分析:

        通过sql/sql_lex.cc代码将SQL语句切分成各种token词。

        通过定义了各种关键字和操作符的symbols[]数组进行关键词和非关键词的标记

  • 语法分析:

        bison语法分析器,通过sql/sql_yacc.cc规则代码将语句解析为“语法树”,判断你输入的这个SQL语句是否满足MySQL语法

        如果你的语句不对,就会收到“You have an error in your SQL syntax”的错误。

4. 预处理器

对请求进行拆分。

先提交SQL模板语句,再提交参数执行。

对于多次重复执行的语句来说,提交一次模板即可,然后多次提交参数实现多次执行,提高效率。

此处会进行语法验证,表和列是否存在、别名歧义等。

5. 优化器(确定成本最小的执行计划-SQL语句要怎么做?)

基于成本的优化器CBO:从众多执行路径中选择一个成本最小的执行路径作为执行计划

成本是指数据库的数据表、数据量、索引等信息算出SQL语句对应的IO成本和CPU成本。

6. 执行器

先验证有没有权限。

执行器根据表的引擎定义,去使用这个引擎提供的接口。 按照执行计划,逐步到存储引擎中调用这些Handler API并拿到返回结果。 索引查询、遍历查询、构建临时表等都在此处完成。

7. 存储引擎

Handler API

8. 返回处理结果

执行器通过TCP返回

 

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

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

相关文章

自动化测试selenium(2)

目录 WebDriver介绍 WebDriver使用 使用WebDriver驱动操作浏览器(打开一个百度) WebDriver 相关API 定位元素 操作元素 上一篇主要介绍了自动化测试的概念以及selenium的基本原理, 这里我们来讲一下如何利用selenium来写测试用的脚本. WebDriver介绍 Selenium是一个用于…

JetBrains PhpStorm 2024.1 发布 - 高效智能的 PHP IDE

JetBrains PhpStorm 2024.1 发布 - 高效智能的 PHP IDE 请访问原文链接:JetBrains PhpStorm 2024.1 (macOS, Linux, Windows) - 高效智能的 PHP IDE,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org JetBrains PhpSt…

算法—分治

分而治之:指的是当主问题可以被分解为一个相同次级问题加相同基本问题时,采用这种思想,基本问题指问题规模最小时的情况,次级问题是指主问题的n级降低n-1级的问题。 具体实现:多数采用递归操作分解,然后递归操作&#…

Harmony鸿蒙南向外设驱动开发-Audio

Audio驱动概述 多媒体系统是物联网设备开发中不可缺少的一部分,Audio作为其中重要的一个模块,Audio驱动模型的构建显得尤为重要。 本文主要介绍基于HDF(Hardware Driver Foundation)驱动框架开发的Audio驱动,包括Aud…

【数据结构(五)】栈

❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你学更多数据结构知识 目录 1.前言2.概念3.栈的使用4.栈的应用场景4.1有效的括号4.2逆波兰表达式4.3栈的压入弹…

分布式系统接口限流方案

Git地址:https://gitee.com/deepjava/test-api-limit.git 方案一、 Guava工具包 实现单机版限流 具体代码见git 方案二、Redis lua脚本 实现分布式系统的接口限流 具体代码见git

AI虽强,搜索引擎仍不可或缺

AI 领域正以前所未有的速度发展,大模型的发布变得愈发频繁,模型的规模也在持续扩大。如今,大模型的起点已经攀升至数十亿参数(数十 B,B 是 Billion 的简写,10 亿),其功能之广泛&…

OSCP靶场--Banzai

OSCP靶场–Banzai 考点(ftp爆破 webshell上传web1访问403web2可以访问webshell反弹mysql udf提权) 1.nmap扫描 ## nmap扫描一定要使用 -p- 否则容易扫不全端口 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.158.56 -Pn -p- --min-rate 2500Starting Nmap 7.…

循序渐进丨MogDB 数据库带级联从库的集群切换后如何保持原有架构?

生产数据库运行过程中可能会涉及到升级或者打补丁,导致各节点的角色有计划的发生改变。如果集群内角色发生改变,是否还能保持原有架构继续对外提供服务呢?我们来做一下测试。 采用22模式模拟同城两机房部署4节点 MogDB 数据库集群&#xff0c…

【计算机毕业设计】人事管理系统——后附源码

🎉**欢迎来到我的技术世界!**🎉 📘 博主小档案: 一名来自世界500强的资深程序媛,毕业于国内知名985高校。 🔧 技术专长: 在深度学习任务中展现出卓越的能力,包括但不限于…

设计模式(22):解释器模式

解释器 是一种不常用的设计模式用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的解释器和解释器设计当我们需要开发一种新的语言时,可以考虑使用解释器模式尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中&…

基于java+springboot+vue实现的居家养老健康管理系统(文末源码+Lw)23-313

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装智慧社区居家养老健康管理系统软件来发挥其高效地信息处理…