当前位置: 首页 > 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…...

【监控】【Nginx】使用 Docker 部署 Prometheus + Grafana 监控 Nginx

在现代应用程序中,监控是确保服务高可用性和性能的关键。本文将详细介绍如何使用 Docker 部署 Prometheus 和 Grafana,以监控 Nginx。我们将分步骤讲解每个环节,以确保你能够顺利完成整个过程。 准备工作 在开始之前,请确保你的…...

Vue3 + Vite Web项目 Electron 打包桌面应用程序

在根目录下创建 electron 文件夹 创建 electron/main.js 文件: // 导入模块 const { app, BrowserWindow ,Menu } require(electron) const path require(path)// 创建主窗口 const createWindow () > {const mainWindow new BrowserWindow({width: 1440…...

Linux:login shell和non-login shell以及其配置文件

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 shell是Linux与外界交互的程序,登录shell有两种方式,login shell与non-login shell,它们的区别是读取的配置文件不同,本…...

面试速通宝典——1

1. 内存有哪几种类型? ‌‌‌‌  内存分为五个区,堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量&#…...

用uniapp 及socket.io做一个简单聊天 升级 9

比这之前优化了以下功能 上线通知 群聊里适时显示在线人数 约请好友 通过好友通过socket 相应端自动变化 PC端可以拉取摄象头拍照 PC端可以录音发送 拉起摄象头发送录象 <template><view class""><scroll-view scroll-y"true" class&…...

【Unity Shader】Special Effects(九)Vortex 旋涡(UI)

源码:[点我获取源码] 索引 Vortex 旋涡思路分析旋涡中心旋涡旋转旋涡强度旋涡动画Vortex 旋涡 旋涡效果可以将一张图像以指定点作为旋涡中心,呈顺时针旋涡动画效果,使用动画播放器: 思路分析 首先,旋涡特效的核心也即是旋转(特别是uv坐标的旋转); 在此基础上,旋涡中…...

01_两数之和

一、题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。…...

ChatGLM-6B-部署与使用

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 什么是ChatGLM-6B 一、简介 ChatGLM-6B 是由清华大学知识工程实验室&#xff08;KEG&…...

李宏毅结构化学习 03

文章目录 一、Sequence Labeling 问题概述二、Hidden Markov Model(HMM)三、Conditional Random Field(CRF)四、Structured Perceptron/SVM五、Towards Deep Learning 一、Sequence Labeling 问题概述 二、Hidden Markov Model(HMM) 上图 training data 中的黑色字为x&#xff…...

java重点学习-总结

十五 总结 https://kdocs.cn/l/crbMWc8xEZda &#xff08;总结全部的精华&#xff09; 1.面试准备 企业筛选简历规则简历编写注意事项(亮点)项目怎么找&#xff0c;学习到什么程度面试过程(表达结构、什么样的心态去找工作) 2.redis 缓存相关(缓存击穿、穿透、雪崩、缓存过期淘…...