mysql执行sql语句的详细过程,你知道吗?进来看一看,一解迷惑

前言

MySQL 在执行 SQL 语句时,经历了多个步骤和不同的组件,每个步骤都涉及特定的任务。以下是 MySQL 执行 SQL 语句的详细过程:

步骤

  1. 客户端请求
    客户端通过 MySQL 客户端(例如 mysql 命令行工具、JDBC 或其他 API)向 MySQL 服务器发送 SQL 查询请求。

  2. 连接器
    连接器负责建立客户端和服务器之间的连接。它处理连接、认证、权限验证等事务。客户端连接到 MySQL 服务器后,连接器会为该连接分配一个线程。

  3. 查询缓存
    在查询缓存阶段,MySQL 首先检查查询缓存(如果启用了查询缓存)。查询缓存存储了之前执行过的查询及其结果。如果查询缓存中存在相同的查询且查询缓存未失效,MySQL 会直接返回缓存的结果,跳过后续步骤。

  4. 分析器
    如果查询缓存未命中,MySQL 服务器会将 SQL 语句发送到分析器进行解析和验证。
    4.1 词法分析
    词法分析器会将 SQL 语句拆解成不同的标记(tokens),这些标记代表 SQL 语句中的不同部分,如关键字、表名、列名等。
    4.2 语法分析
    语法分析器会根据 SQL 语法规则检查这些标记的组合是否合法。它会生成一个解析树(Parse Tree),用于表示 SQL 语句的结构。如果语法错误,解析过程会在此阶段报错并终止

  5. 优化器
    优化器会根据解析树生成查询执行计划。优化器会决定如何高效地执行查询,包括选择表的扫描顺序、选择适当的索引、决定连接顺序等。
    优化器会评估不同的执行计划,并选择最优的计划。

  6. 执行器
    在生成执行计划后,执行器负责实际执行查询并返回结果。执行器按照优化器生成的执行计划逐步执行。
    6.1 权限验证
    执行器会首先验证用户是否有权限执行该查询。如果用户没有足够的权限,查询会被拒绝。
    6.2 逐步执行
    执行器按照执行计划逐步执行查询操作,如访问表、索引查找、数据检索等。执行器会将查询结果逐步收集并返回给客户端。

  7. 返回结果
    查询执行完成后,MySQL 服务器会将结果返回给客户端。如果查询是修改操作(如 INSERT、UPDATE、DELETE),服务器会返回受影响的行数

详细的 MySQL 执行过程示意图

graph LR
A[客户端请求] --> B[连接器]
B --> C{查询缓存}
C – 缓存命中 --> D[返回缓存结果]
C – 缓存未命中 --> E[分析器]
E --> F[词法分析]
F --> G[语法分析]
G --> H[优化器]
H --> I[执行器]
I --> J{权限验证}
J – 有权限 --> K[逐步执行]
K --> L[返回结果]
J – 无权限 --> M[拒绝执行]

示例

假设我们执行一个简单的查询语句:
SELECT * FROM users WHERE id = 1;

详细步骤
客户端请求:客户端发送查询语句 SELECT * FROM users WHERE id = 1;。
连接器:连接器处理连接和认证,并分配一个线程。
查询缓存:MySQL 检查查询缓存,如果查询缓存中存在相同的查询且未失效,则返回缓存结果;否则,进入分析器。
分析器:
词法分析:将查询语句拆解成标记(如 SELECT、*、FROM、users、WHERE、id、=、1)。
语法分析:根据 SQL 语法规则检查标记组合是否合法,并生成解析树。
优化器:生成查询执行计划,选择合适的索引和扫描顺序。
执行器:
权限验证:验证用户是否有权限访问 users 表和执行 SELECT 查询。
逐步执行:根据执行计划逐步执行查询操作,访问 users 表,使用索引查找 id = 1 的记录,并返回结果。
返回结果:MySQL 将查询结果返回给客户端。

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

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

相关文章

洛谷 P1078 [NOIP2012 普及组] 文化之旅

题意 有一个 n n n 点 m m m 边的无向图,每个点都有一个颜色(可能重复),还给定了一个矩阵 A A A。如果经过了颜色为 i i i 的点,那就不能再经过颜色为 i i i 的点以及满足 A i , j 1 A_{i,j}1 Ai,j​1 的颜色为…

Vuex的基本使用

1.安装vuex npm i vuex3 2.引入 import Vuex from vuex 3.使用 Vue.use(Vuex) 4.在src下的目录创建store,新建index.js import store from ./store 5.编写index.js import Vue from vue import Vuex from vuex Vue.use(Vuex)//用于操作组件中的动作 const actions{a…

零知识学习之DPDK与RDMA(3)—— 认识DPDK(3)

接前一篇文章:零知识学习之DPDK与RDMA(2)—— 认识DPDK(2) 本文内容参考: 《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社 https://blog.51cto.com/u_15301988/5181201 特此致谢&…

视频分析、目标检测的过去和未来:目标检测从入门到精通 ------ YOLOv8 到 多模态大模型处理视觉基础任务

文章大纲 计算机视觉项目的关键步骤目标检测入门视频分析项目最佳实践数据集构建数据准备:数据集标注规范与数据规模参考标注工具标注工具:目标检测yolo 极简标注工具综合标注工具:label-studio半自动标注工具:X-AnyLabeling目标检测与多模态哪些多模态模型可以做目标检测?…

ubuntu 23 连接正点imx6ull的uboot网络设置(nfs和tftp)

由于使用ubuntu23,无法连接正点的imx6ull的uboot,因为这个uboot里面的nfs是v2,ubuntu23内核是6.5不支持uboot v2。配置/etc/default/nfs-kernel-server sudo vim /etc/default/nfs-kernel-server 更改以下参数: RPCNFSDCOUNT"…

Shell Expect自动化交互(示例)

Shell Expect自动化交互 日常linux运维时,经常需要远程登录到服务器,登录过程中需要交互的过程,可能需要输入yes/no等信息,所以就用到expect来实现交互。 关键语法 ❶[#!/usr/bin/expect] 这一行告诉操…

昇思MindSpore学习笔记3-02热门LLM及其他AI应用--K近邻算法实现红酒聚类

摘要: 介绍了K近邻算法,记录了MindSporeAI框架使用部分wine数据集进行KNN实验的步聚和方法。包括环境准备、下载红酒数据集、加载数据和预处理、搭建模型、进行预测等。 一、KNN概念 1. K近邻算法K-Nearest-Neighbor(KNN) 用于分类和回归的非参数统计…

鸿蒙 HAP/HAR/HSP,你分清楚了吗?

鸿蒙 App 的项目结构一般为:HAP(主 App) 依赖 HSP(动态库) 或 HAR(静态库)。 模块描述场景HAPHAP(Harmony Ability Package)是应用安装和运行的基本单元。HAP 包是由代码、资源、第三方库、配置文件等打包生成的模块包,其主要分为…

计算机网络部分知识点整理

停止等待协议的窗口尺寸为 1。 √以太网标准是IEEE802.3TCP/IP四层,OSI模型有7层,地址解析协议 ARP 在 OSI 参考七层协议属于数据链路层,在TCP/IP 协议属于网络层,ARP作用:将 IP 地址映射到第二层地址,交换…

Spring中使用FactoryBean配置注入Bean

spring通过FactoryBean配置可以将第三方框架整合到Spring中来,FactoryBean配置如下: 写一个用于注于的实体类,如User,并对这个类写一个实现FactoryBean的中间类(UserFactoryBean) User类 /** *Description: *author…

粒子扩展卡尔曼滤波|MATLAB代码

粒子滤波PF与扩展卡尔曼滤波EKF结合 下载链接:https://download.csdn.net/download/callmeup/89512392 粒子滤波 粒子滤波是一种用于估计状态变量的非线性滤波方法。它通过引入一组粒子来近似表示概率分布,从而利用蒙特卡洛方法进行状态估计。粒子滤波的主要思想是根据系统…

什么是带有 API 网关的代理?

带有 API 网关的代理服务显著提升了用户体验和性能。特别是对于那些使用需要频繁创建和轮换代理的工具的用户来说,使用 API 可以节省大量时间并提高效率。 了解 API API,即应用程序编程接口,是服务提供商和用户之间的连接网关。通过 API 连接…

树莓派(名词)

看书的时候看到了这个名词,查了一下。 树莓派,(英语:Raspberry Pi,简写为RPi,别名为RasPi / RPI) 是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于L…

昂科烧录器支持MindMotion灵动微电子的32位微控制器MM32L052NT

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中MindMotion灵动微电子的32位微控制器MM32L052NT已经被昂科的通用烧录平台AP8000所支持。 MM32L052NT使用高性能的ARM Cortex-M0为内核的32位微控制器,最高工作频率…

Revit 专业实用的BIM模型设计软件下载安装,Revit 最新版下载安装

Revit,该软件是专门为建筑信息模型(BIM)量身打造的,不仅极大提升了建筑设计师的工作效率,更为他们创造了一个更加精确、高效的设计环境。 在Revit的助力下,建筑设计师们能够轻松地进行建筑建模&#xff0c…

Maven列出所有的依赖树

在 IntelliJ IDEA 中,你可以使用 Maven 插件来列出项目的依赖树。Maven 插件提供了一个名为dependency:tree的目标,可以帮助你获取项目的依赖树详细信息。 要列出项目的依赖树,可以执行以下步骤: 打开 IntelliJ IDEA,…

U盘非安全拔出后的格式化危机与数据拯救策略

在数字化时代,U盘作为便捷的数据携带工具,其重要性不言而喻。然而,许多用户在日常使用中往往忽视了安全退出的重要性,直接拔出U盘后再插入时可能会遭遇“需要格式化”的提示,这一状况不仅令人措手不及,更可…

循环队列三种实现方式的基本操作(王道标准)

文章目录 牺牲一个存储空间来区分队空和队满设置size数据成员,表示队列当前长度设置tag数据成员 牺牲一个存储空间来区分队空和队满 缺点: 有一个单元无法利用 定义 #define MaxSize 10 typedef struct{ElemType data[MaxSize];int front,rear; }SqQu…

备忘:PythonREPL中py_repl.run方法执行报错和修改方法

PythonREPL是python提供的 “Read–Eval–Print Loop”(读取-求值-打印-循环)的缩写,它是一种简单的、交互式的编程环境,我们之前在用AI生成代码后执行就使用这个方法,例如 def py_repl_tool(self, realcode: str):py…

linux下OpenSSL升级到1.1以上版本

要将CentOS 7上的OpenSSL升级到1.1以上版本,您需要遵循以下步骤。请注意,这些步骤可能需要一些系统管理经验,因为您将从源代码编译和安装OpenSSL。 1. 更新系统软件包 首先,确保您的系统软件包是最新的。使用以下命令更新所有软…