一条SQL在mysql数据库中经历的过程

    SQL语句在MySQL数据库中普遍经历的过程如下:

  1.     客户端发起查询请求到MySQL数据库服务器监听端口;
  2.     MySQL数据库server端接收到请求;
  3.     server端从已有的连接池或者新建一个线程,用来处理客户端发起的请求;
  4.     server层对请求进行身份认证和权限认证;
  5.     SQL解析器对SQL语句进行词法分析、语法分析以及生成语法树;
  6.     优化器对SQL进行优化,选择最佳执行计划;
  7.     存储引擎层执行SQL后,将查询到的SQL语句返回;
  8.     客户端最终接收到返回的结果集。

    上面只是一条SQL语句普遍经历的过程,select、delete、update、insert语句在MySQL数据库中的执行过程又有什么区别呢?如果SQL带有过滤条件、分组语句、排序语句、join语句,那SQL的执行过程又有何不同呢?

一、select语句在MySQL数据库中经历的过程

    上面的步骤1、2、3不同类型sql都是一样的过程,细微处可能略有差异,比如说用户是通过MySQL客户端发起的请求,通过应用中配置的jdbc发起的请求等,不同实例server端的监听端口也可能不同,客户端可以通过不同机制获取到连接线程,比如说druid连接池等。server端接受到请求后会验证发起请求的客户端是否通过身份认证、是否具有对查询对象的权限,都通过后才会正式开始执行sql。

    从第5步开始,我们假设一条select语句主体内容如下:

    select age,name from users where age > 20 group by age order by age limit 50;

    SQL解析器首先对提取处select语句中的语法关键词,select、from、where、group  by、order by、limit等,然后对语法进行分析,比如说符号是否正确、查询的列是否存在、表是否存在,接着生成语法分析树。

    优化器可能对SQL进行改写,如in转换为exists,或者or转换为union等,接着优化器基于统计信息选择成本最小的执行计划,比如说是走索引或者是全表扫描。如果是从大量数据中查询少量数据,可能就是走索引,优化器会预估不同执行计划的成本。

     select优化后最终到存储引擎层开始执行,假设这里存储引擎用的是innodb,innodb会首先到内存中去寻找要查找行记录所在的数据页,通过innodb中的一个哈希表快速判断对应的数据页id是否存在,如果不存在,则会通过B+树索引,最终定位到需要查找的数据的地址,然后将数据页加载到内存中,再通过二分查找法找到对应的行记录。

    存储引擎根据过滤条件,过滤出要查找的记录,如果使用了limit 50语句,则只会过滤出50行数据返回到server层。

    server层根据order by和group by语句,对结果集进行排序和分组。如果结果集比较大,内存中放不下,则会使用临时表来存放分组结果和排序结果,结果集最终返回到客户端。

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

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

相关文章

Compose 的产生和原理

引言 compose 出现的目的: 重新定义android 上ui 的编写方式。为了提高android 原生ui开发效率。让android 的UI开发方式跟上时代。 正文 compose 是什么? 就是一套ui框架 和flutter 一样是一套ui框架 Flutter:跨平台开发趋势与企业应用的…

【计算机网络】一二章

一 二 非常棒的例子 相同的传播时延,带宽越大,该链路上所能容纳的比特数越多 相同的传播时延,带宽越大,该链路上所能容纳的比特数越多 往返时间(Round-Trip Time,RTT)s是指从发送端发送数据分组…

微软OneNote无法同步解决方案

目录 前言原因UWP特性 解决方案C***h注册表 参考链接 前言 假设有多台Windows电脑,最方便且免费的多设备笔记同步方案就是微软自家的OneNote,使用OneDrive自带的5G云存储。 但是在国内大陆的OneNote,经常会出现无法同步、同步失败&#xff1…

《商业智能(BI)的演进:从数据仓库到智能决策》

01、什么是商业智能BI? 商业智能BI - 派可数据商业智能BI可视化分析平台 首先要了解什么是商业智能BI( Business Intelligence )?百度商业智能BI有很多很多官方的定义,各种解释,实际上从这么多年的经验出发…

云钥科技工业相机定制服务,助力企业实现智能智造

在工业自动化、智能制造和机器视觉快速发展的今天,工业相机作为核心感知设备,其性能直接决定了检测精度、生产效率和产品质量。然而,标准化工业相机往往难以满足复杂多样的应用场景需求,‌工业相机定制‌逐渐成为企业突破技术瓶颈…

LeetCode[19]删除链表的倒数第N个节点

思路: 要想一次循环,一趟遍历完,那肯定是要想到双指针了,但是双指针怎么做呢?题目给出删除倒数第N个,我们如果能找到倒数第N个节点的前一个节点就行了,倒数第N个肯定是倒着数,那我们…

API调用大模型推理与第三方API实现业务整合

基于Python实现大模型推理与第三方API调用的集成,需要结合Function Call机制与提示词工程。 一、技术架构设计 双阶段流程 推理阶段:大模型解析用户意图,生成结构化API调用指令执行阶段:Python代码解析指令并触发第三方API # 示例…

Java面试:集合框架体系

一、ArrayList 1.数组(Array) 是一种用连续的内存空间存储相同数据类型数据的线性数据结构 数组如何获取其他元素的地址值? 寻址公式:a[i] baseAddress i * dataTypeSize baseAddress:数组的首地址dataTypeSize&am…

麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程

1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题,为保障系统安全,需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4,以规避潜在风险,提升系统整体的安全性和稳定性。 1.1 本…

Android多线程通信机制

目录 ​引言 ​一、Android多线程通信的核心机制 ​1. Handler Looper MessageQueue ​2. AsyncTask(已过时,但仍有参考价值)​ ​3. HandlerThread与IntentService ​4. 线程池(ThreadPoolExecutor)​ ​5. …

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号 你的步骤非常详细且清晰,能够帮助用户在 Excel 中通过 VLOOKUP 和条件格式来查找并标红匹配的串号。以下是对你提供的步骤的简要总结和补充说明: 1. 添加“是否匹配”列 在 a.xlsx 中新增一列…

Spring Boot 集成高德地图电子围栏

摘要:本文手把手教你通过 Spring Boot 调用高德地图 API 实现电子围栏功能,涵盖云端围栏创建、设备位置监控与本地算法校验,附带完整代码和避坑经验! 一、电子围栏核心原理 1.1 什么是电子围栏? 虚拟地理边界&#x…

hadoop伪分布式搭建--启动过程中如果发现某个datanode出现问题,如何处理?

一、问题定位&#xff1a; &#xff08;1&#xff09;检查DataNode日志&#xff1a; DataNode日志通常位于$HADOOP_HOME/logs/或/var/log/hadoop-hdfs/目录下&#xff0c;文件名为hadoop-hdfs-datanode-<hostname>.log。重点关注以下错误类型&#xff1a; ——Incompa…

微软开源神器OmniParser V2.0 介绍

微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具&#xff0c;旨在将用户界面&#xff08;UI&#xff09;截图转换为结构化数据&#xff0c;从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型&#xf…

DLMS电能表通讯协议学习笔记

本文是对于IEC62056协议族&#xff0c;即DLMS协议族的中文说明手册。本文并没有包含DLMS协议族的全部&#xff0c;但解释了在应用中可能出现的大多数情况。本文的目的是为电能量数据采集终端提供与使用DLMS协议族的电能表通讯的协议说明。 本文参考文献如下&#xff1a; &#…

browser_use 自动化浏览器agent使用案例

参考&#xff1a; https://github.com/browser-use/browser-use/tree/577e15c963f7e3c499aac312ecb8da6e1f4733fe 浏览器启动后&#xff0c;页面一直空白问题解决&#xff1a; https://github.com/browser-use/browser-use/issues/986 安装&#xff1a; pip install browser…

【Go】无法访问 proxy.golang.org 进行依赖下载

golang.org/x/net/context: golang.org/x/netv0.37.0: Get "https://proxy.golang.org/golang.org/x/net/v/v0.37.0.zip": dial tcp 142.251.215.241:443: connect: connection refused解决方案&#xff1a; 使用国内的 Go 代理&#xff0c;如 goproxy.cn 或 gopro…

RocketMQ 性能优化与调优策略(二)

实战演练&#xff1a;全方位调优策略 &#xff08;一&#xff09;细致入微的配置优化 生产者配置&#xff1a; sendMsgTimeout&#xff1a;此参数定义了生产者发送消息时等待 Broker 返回确认的最长时间&#xff0c;默认值为 3000 毫秒。若在该时间段内未收到确认&#xff0c…

React前端开发中实现断点续传

在前端开发中&#xff0c;断点续传是指在上传文件时&#xff0c;如果上传过程中中断&#xff08;如网络断开、页面刷新等&#xff09;&#xff0c;可以从断点处继续上传&#xff0c;而不是重新上传整个文件。这种功能在大文件上传场景中非常有用。 以下是实现断点续传的思路和具…

Spring 框架中常用注解和使用方法

Spring 框架中常用注解的详细解释与应用场景&#xff0c;结合核心功能和实际开发需求进行分类说明&#xff1a; 1.组件定义注解 1.1 Component 作用&#xff1a;通用注解&#xff0c;将普通 Java 类标记为 Spring 管理的 Bean&#xff0c;由容器实例化和管理&#xff0c;相当…