一条Select语句在MySQL-Server层的执行过程

news2024/10/7 4:36:39
select customer_id,first_name,last_name from customer where customer_id=14;
  1. 先连接到数据库,连接器 负责跟客户端建立连接、获取权限、维持和管理连接。
    客户端再次发送请求,就会使用同一个连接,客户端如果长时间没动静,就会断开该链接。
    查看连接的状态:
    show processlist
    sleep表示现在系统中有一个空闲链接
    查看连接的保持时间:
    SHOW VARIABLES LIKE ‘wait_timeout’;
    不过,每个连接对象中都有一块临时内存,用来管理运行过程中的数据,长时间保持连接,会使内存涨得快
  2. MySQL Server 接收到这个查询请求后,先到 查询缓存器 查看,之前是否执行过这条语句。之前执行过的语句及其结果会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句hash之后的值,value是查询的结果。
    查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。
    MySQL 8.0 版本直接将查询缓存的整块功能删掉了。
  3. 没有命中缓存,分析器 将客户端提交的一段SQL文本拆分成词,并识别每个词代表什么
select,customer_id,first_name,last_name,from,customer,where,customer_id,
=14

如果SQL语句词法分析没有问题,就会根据词法分析的结果,对SQL语句进行语法分析,最后生成解析树
在这里插入图片描述
预处理器进一步对解析树检查,检查表名、字段是否存在、用户对表的操作权限,最后重新生成一个新的解析树

  1. 优化器 根据解析树生成 执行计划,并基于最小成本模型,从中选择一个最优执行计划。所谓最小成本模型,即IO开销和CPU开销之和最小。例如:一条Select语句用到了主键索引 和 非主键索引,那么主键索引就是最优的执行计划,因为非主键索引会有一次回表操作,回表操作会增加IO开销和CPU开销
  2. MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,得到了一个查询计划。于是就进入了执行器阶段,开始执行语句。执行器根据表的引擎定义,调用引擎提供的查询接口,提取数据。

假设customer_id 字段不是索引,select语句也没有用到索引,这时查询只能全表扫描。那么执行器的执行流程是这样的:

  • 调用 InnoDB 引擎接口取这个表的第一行,判断customer_id 值是不是 14,如果不是则跳过,如果是则将这行缓存在结果集中;
  • 调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。
  • 执行器将上述遍历过程中所有满足条件的行组成的结果集返回给客户端。
    至此,这个语句就执行完成了

Select语句在MySQL逻辑结构Service层的执行流程,如下图:
Select语句在MySQL逻辑结构Service层的执行流程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用R Shiny生态快速搭建交互Web网页APP应用

什么是Shiny? Shiny包可以快速搭建基于R的交互网页应用。对于web的交互,之前已经有一些相关的包,不过都需要开发者熟悉网页编程语言(html,CSS,JS)。最近我们被客户要求撰写关于R Shiny的研究报告,包括一些…

使用 Huggingface Trainer 对自定义数据集进行文本分类

文本分类是一项常见的 NLP 任务,它根据文本的内容定义文本的类型、流派或主题。Huggingface🤗 Transformers 提供 API 和工具来轻松下载和训练最先进的预训练模型。Huggingface Transformers 支持 PyTorch、TensorFlow 和 JAX 之间的框架互操作性。模型还…

JAVA学习-java基础讲义01

java基础讲义一 java语言1.1 java语言介绍1.1.1 什么是java1.1.2 java之父1.1.3 java语言发展史1.2 java语言的特点二 java环境搭建相关2.1 Java环境介绍2.1.1 虚拟机介绍2.1.2 JVM介绍2.2 Java跨平台2.2.1 跨平台2.2.2 跨平台原理2.3 java运行过程2.4 JDK、JRE、JVM关系图2.4.…

JaVers:自动化数据审计

在开发应用程序时,我们经常需要存储有关数据如何随时间变化的信息。此信息可用于更轻松地调试应用程序并满足设计要求。在本文中,我们将讨论 JaVers 工具,该工具允许您通过记录数据库实体状态的更改来自动执行此过程。 Javers如何工作&#x…

RT-thread lts-v3.1.x版本,GD32F450以太网,上电之后有一定概率ping不通问题处理。

先给结论 官方驱动没有按照GD32F4XX手册要求,等待ENET_DMA_CTL第20bit清0后再写 synopsys_emac.c 文件,void EMAC_FlushTransmitFIFO(struct rt_synopsys_eth * ETHERNET_MAC)函数,增加一句判断即可解决。 /*** Clears the ETHERNET transm…

Kotlin高仿微信-第4篇-主页-消息

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

Android Studio / IDEA 调试金手指:live template自动打印方法名以及所有变量

ctrl alt s 搜设置,template,结果是在 live template 区域设置代码模板的,不知这功能和直播有何关系,live stream? live template 就是自动完成一段代码。比如输入 fori,然后ctrl空格补全循环体&#xf…

Apache-DButils以及Druid(德鲁伊) 多表连接查询的解决方案:两种

Apache-DButils以及Druid(德鲁伊) 多表连接查询的问题 每博一文案 张爱玲说,于千万人之中,遇到你所要遇到的人,于千万年之中,时间的无涯的荒野里,没有 早一步,也没有晚一步,刚巧赶上了。 人生海…

iPhone开机密码什么时候会用到?忘记了怎么办?

iPhone的开机密码也是屏幕解锁密码,它的作用还是很重要的。一般用在: 解锁手机手机重启后解锁手机系统更新后第一次解锁手机手机连接电脑需要信任设备Face ID或指纹解锁失败三次后连接Apple Watch后第一次解锁手机 虽然我们现在经常使用其他的解锁方式&…

马斯克特斯拉内部邮件火了:痛恨开会,少说黑话

金磊 羿阁 发自 凹非寺量子位 | 公众号 QbitAI马斯克给员工的一封内部邮件火了。鼓励员工拒绝开会、公司规定不合理可以不遵守……俨然一个为员工着想的好老板。一开始人们还奇怪马斯克的画风怎么变这么快,后来才发现原来这是他6年前写的。对象也不是推特员工&#…

BCN点击试剂:1516551-46-4,BCN-succinimidylester,BCN NHS

●中文名:丙烷环辛炔-活性酯,BCN-琥珀酰亚胺酯 ●英文名:BCN-NHS, BCN-NHS 酯,BCN-活性酯,BCN-succinimidylester 【产品理化指标】: CAS号: 1516551-46-4 分子式:C15H17…

58 - 类模板的概念和意义

---- 整理自狄泰软件唐佐林老师课程 1. 思考 在C中是否能够将泛型的思想应用于类? 1.1 类模板 一些类主要用于存储和组织数据元素类中数据组织的方式和数据元素的具体类型无关 如:数组类、链表类、Stack类、Queue类,等 C中模板的思想应用于…

【LeetCode】No.103. Binary Tree Zigzag Level Order Traversal -- Java Version

题目链接:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ 1. 题目介绍(Binary Tree Zigzag Level Order Traversal) Given the root of a binary tree, return the zigzag level order traversal of its nodes’…

【网络编程】第二章 网络套接字(socket+UDP协议程序)

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

html实训大作业《基于HTML+CSS+JavaScript红色文化传媒网站(20页)》

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

群晖修改默认端口为80、443

写之前哔哔两句 我这个人是个有强迫症的人,本来群晖用的好好的,然后觉得为什么还要输入5000、5001端口呢? 然后我就尝试着去修改端口,想修改为40、443的时候,结果提示端口被保留,这我哪能忍,ss…

springboot整合canal

该篇博客是基于前两篇的基础上来实现的,如果没有看过可以看一下前面的步骤 使用docker搭建 MYSQL主从_极速小乌龟的博客-CSDN博客docker 上面搭建mysql主从服务器https://blog.csdn.net/qq_35771266/article/details/128101019?spm1001.2014.3001.5501 ShardingS…

Matlab optimtool优化阵列天线的幅相激励

摘要: 阵列天线的激励幅度和相位控制着其方向图形状。例如锥削分布的幅度可实现低副瓣、递变相位激励可改变波束指向,采用幅相综合控制则可实现平顶波束、余割平方等波束赋形。下面介绍利用Matlab optimtool优化阵列天线的幅相激励实现上述需求。 推文…

超市结算系统|Springboot+Vue通用超市结算收银系统

作者主页:编程千纸鹤 作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享 收藏点赞不迷路 关注作者有好处 项目编号&…

JavaScript基础语法(变量)

JavaScript基础语法(变量) 学习路线:JavaScript基础语法(输出语句)->JavaScript基础语法(变量)->JavaScript基础语法(数据类型)->JavaScript基础语法&#xff…