当前位置: 首页 > news >正文

简单说说MySQL中 SELECT 语句执行流程

流程讲解

MySQL 中 SELECT 语句的执行流程分为多个步骤,通常从用户发出查询请求到 MySQL 返回结果包含以下过程:

  1. 客户端/服务器通信
    用户向 MySQL 服务器发送 SELECT 查询语句。

  2. 查询解析(Parser)
    MySQL 收到 SQL 语句后,会将查询语句进行词法和语法分析。词法分析器将 SQL 语句拆解为关键字、表名、字段名等元素,然后语法分析器根据 MySQL 语法规则检查语句的合法性

  3. 预处理
    语法解析后,MySQL 会对查询语句进行预处理,例如:检查表、列是否存在,验证用户的权限等

  4. 查询优化器(Optimizer)
    这是 MySQL 查询性能的关键步骤。优化器决定如何执行查询,例如选择最优的索引,决定表连接顺序,选择全表扫描还是使用索引等。MySQL 的优化器会生成多个执行计划,选择成本最低的计划。

  5. 查询执行器(Executor)
    执行器根据优化器生成的执行计划去执行查询语句。执行器逐步获取数据,按优化器的指示选择适当的访问方式,如是否使用索引,是否需要回表等。

  6. 存储引擎层交互
    MySQL 是多存储引擎的系统。执行器根据存储引擎的接口与底层存储引擎交互,获取表中的数据。不同的存储引擎(如 InnoDB、MyISAM)处理查询的方式可能不同。

  7. 查询缓存(如果启用)
    在 MySQL 8.0 之前,如果查询缓存是开启的且查询结果在缓存中,那么 MySQL 可以直接从缓存中返回结果,而不需要继续执行查询。MySQL 8.0 已移除了查询缓存。

  8. 返回结果
    查询执行完毕后,MySQL 将结果返回给客户端。

select 实例分析

select * from tb_student A where A.age=‘18’ and A.name=’ 张三 ';

针对 SELECT * FROM tb_student A WHERE A.age='18' AND A.name='张三'; 这条 SQL 语句,MySQL 的执行流程可以分为如下几个步骤:

1. 客户端/服务器通信

用户在客户端执行该查询,SQL 语句通过网络传递到 MySQL 服务器。

2. 查询解析(Parser)

MySQL 服务器接收到查询语句后,会对 SQL 进行词法和语法解析。

  • 词法解析:SQL 语句被拆分为单个关键字或标识符,如 SELECT*FROMtb_studentWHEREA.age 等。
  • 语法解析:MySQL 根据 SQL 语法规则检查该查询语句的结构是否正确。如果语法有误,查询会立即失败。

3. 预处理

  • 表和列的合法性检查:MySQL 预处理器会检查表 tb_student 是否存在,字段 agename 是否在表 tb_student 中。
  • 用户权限检查:MySQL 还会验证当前用户是否有权限访问 tb_student 表并执行查询。

4. 查询优化器(Optimizer)

MySQL 的查询优化器将决定查询的最佳执行方式。对于这条查询,优化器可能做的工作包括:

  • 选择合适的索引:如果 agename 字段上有索引,优化器可能决定使用索引来加速查询。
  • 生成执行计划:优化器会评估多个执行计划,比如先通过 age='18' 过滤数据还是通过 name='张三' 过滤,然后选择代价最小的方案。例如,如果 agename 都有索引,优化器可能会选择一个索引作为主导。

5. 查询执行器(Executor)

查询执行器根据优化器生成的执行计划执行查询。假设 age 字段上有索引,那么执行器会:

  • 使用索引快速找到 age=18 的记录。
  • 然后根据 name='张三' 的条件进一步筛选数据。

6. 存储引擎层交互

执行器与底层存储引擎(如 InnoDB)交互,按执行计划获取数据。存储引擎会根据执行器的指令进行:

  • 读取操作:如果涉及到索引查找,存储引擎可能只需要扫描部分数据,而不是全表扫描。
  • 回表操作:如果使用了覆盖索引且所需字段都能从索引中获取,则直接返回;否则可能需要回表(通过主键索引)来获取 *(即所有列)。

7. 过滤和处理

执行器对查询结果进行过滤,确保返回的数据满足 age='18'name='张三' 两个条件。MySQL 将把符合条件的数据组装成查询结果集。

8. 返回结果

查询结果被发送回客户端,完成 SQL 语句的执行。

相关文章:

简单说说MySQL中 SELECT 语句执行流程

流程讲解 MySQL 中 SELECT 语句的执行流程分为多个步骤,通常从用户发出查询请求到 MySQL 返回结果包含以下过程: 客户端/服务器通信: 用户向 MySQL 服务器发送 SELECT 查询语句。 查询解析(Parser): MySQ…...

国产游戏技术:迈向全球引领者的征途

目录 国产游戏技术能否引领全球? 一、国产游戏技术的崛起之路 1.1 初期探索与积累 1.2 技术创新的加速 1.3 文化自信的体现 二、国产游戏技术的核心竞争力 2.1 本地化与定制化策略 2.2 技术创新与应用 2.3 产业链协同与生态构建 三、面临的挑战与应对策略…...

小程序体验版无法正常请求接口,开启 调试可以正常请求

在本地开发工具可以正常访问小程序,上传代码后打开体验版,界面无法请求接口,手机小程序打开调试模式可以正常访问。这可以查看下小程序后台是否设置了服务器域名以及业务域名 然后查看小程序开发工具 - 详情 - 项目配置 重新上传代码&#xf…...

什么是动态数据脱敏?

原文地址 https://www.bytebase.com/blog/what-is-dynamic-data-masking/ 动态数据脱敏(DDM)动态更改返回给应用程序或用户的数据库记录,以此来实时保护敏感数据,且不会更改静态数据。 DDM 与静态数据脱敏(SDM&#x…...

【机器学习】11——矩阵求导

机器学习11——矩阵求导 打公式不太好标注,全图警告!!! 文章目录 机器学习11——矩阵求导1.1标量对向量1.2标量对矩阵2.1向量对标量2.2向量对向量2.3向量对矩阵 1.1标量对向量 1.2标量对矩阵 X是m*n的矩阵,不严谨&am…...

Spring Boot 实战:结合策略模式实现动态定价服务

引言 在现代商业环境中,价格策略的灵活性对于吸引客户和提高市场竞争力至关重要。传统的定价方法往往固定不变,而随着市场的变化和技术的发展,能够根据不同的条件和场景来调整价格的动态定价策略变得越来越重要。Spring Boot 框架以其简洁的…...

Serverless架构

Serverless架构:漂浮在云端的轻盈与自由 类似于 Fn Project 的 Serverless 开源服务有很多,它们都旨在简化函数即服务(FaaS)的开发流程,使得开发者可以更专注于业务逻辑而不是底层基础设施。下面列举了一些知名的 Serverless 开源平台和服务…...

9.20日学习记录及相关问题解答

部分一 今天看了一本古老的书。学到了一些有关计算机的远古的知识。弥补了一些之前没有意识到的空白点。 原来上个世纪就有AI这个东西了 现阶段的主流模式,在许多年前其实是将来要发展的对象。 B/S指的是客户机/服务器结构模式 C/S是在B/S基础上发展过来的。三层结…...

【网络安全】依赖混淆漏洞实现RCE

未经许可,不得转载。 文章目录 正文 依赖混淆是一种供应链攻击漏洞,发生在企业的内部依赖包错误地从公共库(如npm)下载,而不是从其私有注册表下载。攻击者可以在公共注册表中上传一个与公司内部包同名的恶意包&#xf…...

FC优化配置

1.集群扩容CNA时打开bmc 2.给rhel7虚拟机安装tools-需要重启虚拟机 3.FC上创建集群 资源池右击创建集群(物理机大于10台,分业务类型创建集群) (解决集群内主机挂了,动态调整) (解决集群内个别…...

文件防泄漏方法有哪些|6个方法有效防止文件泄密

文件防泄漏是企业和组织保护其敏感信息和核心资产的重要手段。 以下是六个有效防止文件泄密的方法: 1. 文件加密 透明加密:使用专业的防泄密软件,如安企神等,对敏感文件进行透明加密处理。 这种加密方式在用户创建、编辑和保存…...

云盘还安全么?阿里云盘出现BUG,惊现大量陌生人照片

近日,网友称,阿里云盘出现“BUG”。网友表示,在阿里云盘的相册中,只要创建一个新的文件夹,就可以看到其他用户的照片。 记者从反映问题的相关视频中看到,一名用户在阿里云盘的相册功能中,创建了…...

蘑菇成熟待收检测系统源码分享

蘑菇成熟待收检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…...

基于单片机的智能小车的开发与设计

摘要:本文论述了基于 STC89C52 单片机的智能小车的开发与设计过程。该设计采用单片机、电机驱动及光电循迹等技术,保证小车在无人管理状态下,能按照预先设定的线路实现自动循迹功能。在电路结构设计中力求方便,可操作,…...

解决 GitLab CI/CD 中的 `413 Request Entity Too Large` 错误

解决 GitLab CI/CD 中的 413 Request Entity Too Large 错误 在使用 GitLab CI/CD 时,我们可能会遇到 413 Request Entity Too Large 的错误提示。通常,这是因为 GitLab Runner 在上传工件(artifacts)到 GitLab 服务器时&#xf…...

Java项目实战II基于Java+Spring Boot+MySQL的洗衣店订单管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 随着生活节奏的加快,现代人对便捷、高效服务的需求日益增长,洗衣店作为日常生…...

Can‘t connect to local MySQL server through socket

mysql -uroot ERROR 2002 (HY000): Cant connect to local MySQL server through socket /tmp/mysql.sock (2)这是mysql登录时找不到套接字的问题。 首先需要明白的是,Linux端的mysql server启动时会开启一个socket,Linux上的MySQL的客户端在不使用IP连…...

【车载以太网】【SOME/IP】Wireshark 解析

目录 ​​​​​​​Wireshark 官方插件 相关代码: 启用协议插件 Lua插件 测试数据包 Wireshark 下载链接:Wireshark Go DeepSOMEIP插件介绍:https://www.wireshark.org/docs/dfref/s/someip.html官方插件 Wireshark从3.2版本开始支持SOME/IP,启用相应的插件即可以…...

Perl 进程管理

Perl 进程管理 Perl,作为一种高级、通用、解释型、动态编程语言,广泛用于各种任务的自动化,包括进程管理。在Perl中,进程管理涉及创建、控制、同步和终止进程。本文将深入探讨Perl中的进程管理,包括基础知识、高级技巧以及最佳实践。 基础知识 进程创建 在Perl中,使用…...

爬虫 ----hook

目录 定义: 了解什么是hook? 举例 hook XHR请求 XMLHttpRequest 案例地址: Interceptors-拦截器 HOOK cookie操作 cookie 示范 常见的hook代码总结 1.Hook Cookie 2.Hook Header 3.Hook URL 4.Hook JSON.stringify 5.Hook JSON.parse 6.Ho…...

双通道并用:OpenClaw同时接入gemma-3-12b-it与本地知识库

双通道并用:OpenClaw同时接入gemma-3-12b-it与本地知识库 1. 为什么需要混合架构 在个人自动化场景中,我发现纯粹依赖大模型存在两个痛点:一是高频重复问题消耗大量Token,二是模型对专业领域知识的掌握有限。上个月整理技术文档…...

lite-avatar形象库惊艳效果展示:高保真表情+精准唇动同步的对话级数字人呈现

lite-avatar形象库惊艳效果展示:高保真表情精准唇动同步的对话级数字人呈现 桦漫AIGC集成开发 | 微信: henryhan1117 1. 引言:数字人交互的新标杆 想象一下,一个数字人不仅能和你流畅对话,还能做出逼真的表情变化,嘴唇…...

Leather Dress Collection 在软件测试中的应用:自动化生成测试用例与报告

Leather Dress Collection 在软件测试中的应用:自动化生成测试用例与报告 最近和几个做测试的朋友聊天,大家普遍吐槽一件事:写测试用例和整理测试报告,太费时间了。尤其是面对一个复杂的新功能,或者是一大堆历史遗留的…...

RTX4090D显卡性能释放:PyTorch 2.8镜像在文生视频任务中的实战表现

RTX4090D显卡性能释放:PyTorch 2.8镜像在文生视频任务中的实战表现 1. 硬件与镜像环境概览 1.1 RTX 4090D显卡的独特优势 RTX 4090D作为NVIDIA最新一代消费级旗舰显卡,在深度学习领域展现出非凡潜力。与标准版4090相比,4090D在保持相同24G…...

Qwen3.5-9B微调实践:优化OpenClaw的邮件处理技能

Qwen3.5-9B微调实践:优化OpenClaw的邮件处理技能 1. 为什么需要定制邮件处理技能 去年夏天,我被堆积如山的客户咨询邮件淹没了。每天早上一打开邮箱,上百封未读邮件像潮水一样涌来,手动分类、回复、归档的效率低得令人崩溃。作为…...

如何实现Archery复杂SQL审核表单的分步提交与智能验证:完整指南

如何实现Archery复杂SQL审核表单的分步提交与智能验证:完整指南 【免费下载链接】Archery SQL 审核查询平台 项目地址: https://gitcode.com/gh_mirrors/ar/Archery Archery作为一款专业的SQL审核查询平台,其前端表单设计采用了先进的分步提交与智…...

COMSOL锂枝晶生长仿真模拟:四场耦合(化学场、浓度场、电场、应力场)

comsol锂枝晶生长仿真模拟-应力耦合。 化学场、浓度场、电场、应力场,四场耦合模拟锂枝晶的生长。锂金属负极在固态电池中总爱搞事情,枝晶刺穿隔膜的戏码天天上演。实验室里做破坏性测试成本太高,数值仿真就成了预判枝晶生长路径的透视眼。CO…...

OpenClaw场景合集:Qwen3-4B在10个日常任务中的高效应用

OpenClaw场景合集:Qwen3-4B在10个日常任务中的高效应用 1. 为什么选择OpenClawQwen3-4B组合 去年冬天,当我第一次尝试用OpenClaw自动化处理堆积如山的邮件时,这个组合就成了我的效率利器。OpenClaw作为本地化智能体框架,配合Qwe…...

Arduino嵌入式单元测试框架:ArduinoUnit实战指南

1. Arduino平台嵌入式单元测试框架深度解析:unittest库工程实践指南在嵌入式固件开发中,"写完就烧、烧完就测、测完就改"的野蛮生长模式正迅速被工程化开发流程所取代。尤其在ESP32等资源受限但功能复杂的SoC平台上,缺乏可重复、可…...

C语言开发界面太难?libui-ng开源库帮你快速搞定

一、C语言开发者的噩梦,终被一个开源库打破? 搞C语言开发的那些人,基本上都躲不开这么一个让人头疼的点,就是想要去写一个可视化的界面,要嘛就得被迫去学习繁杂的Qt、GTK,不然呢就得拼了命去写Win32代码&a…...