MySQL - 一条查询语句是怎么执行的?

一、执行流程

一条SQL语句,比如:SELECT * FROM users WHERE age > 18; 执行流程。在这里插入图片描述

二、连接器

首先,这条SQL语句会来到MySQL的“大门”——连接器。连接器就像是一个门卫大叔,负责检查你的身份。它会验证你的用户名和密码,看看你是不是有权限进入这个数据库。

验证身份:连接器会检查你的用户名和密码是否正确。如果不对,它会直接把你拒之门外,就像你去参加一个高端派对,结果发现邀请函是假的,门卫大叔会毫不留情地把你拦在外面。

权限检查:如果你通过了身份验证,连接器还会检查你有没有执行这条SQL语句的权限。比如,你想查询users表,但你只有读取orders表的权限,那连接器会告诉你:“不好意思,你没有权限访问这个表!

”如果一切顺利,连接器会为你建立一个连接,并且这个连接会一直保持,直到你主动断开或者超时。这个连接就像是你和MySQL之间的“电话线”,随时可以通话。

三、查询缓存

通过了连接器的检查,SQL语句接下来会来到查询缓存。查询缓存就像是一个“备忘录”,MySQL会把之前执行过的查询结果缓存起来,方便下次直接使用。

缓存命中:如果你的SQL语句和之前某次查询一模一样,MySQL会直接从缓存中返回结果,省去了后续的复杂操作。这就像是你在考试前背了答案,考试时直接写上去,省去了思考的时间。

缓存未命中:但如果你的SQL语句是第一次执行,或者缓存中没有匹配的结果,MySQL就会继续往下执行。这时候,查询缓存就像是一个“摆设”,没啥用。

不过,需要注意的是,MySQL 8.0之后,查询缓存功能被移除了。因为在实际应用中,查询缓存的命中率并不高,而且维护缓存还会带来额外的开销。所以,现在的MySQL已经不再依赖查询缓存了。

四、分析器

如果查询缓存没有命中,SQL语句就会来到分析器。分析器就像是一个“语法老师”,它会检查你的SQL语句是否符合语法规则。

词法分析:分析器首先会进行词法分析,把SQL语句拆分成一个个的“单词”。比如,SELECT、*、FROM、users、WHERE、age、>、18,这些都会被识别为不同的“单词”。

语法分析:接下来,分析器会进行语法分析,检查这些“单词”是否符合SQL的语法规则。比如,SELECT后面必须跟着要查询的字段,FROM后面必须跟着表名,WHERE后面必须跟着条件等等。如果语法有问题,分析器会直接报错。

如果SQL语句通过了分析器的检查,MySQL就会生成一个“语法树”,这个树结构就像是SQL语句的“骨架”,后续的执行过程都会基于这个骨架进行。

五、优化器

通过了分析器的检查,SQL语句接下来会来到优化器。优化器就像是一个“聪明的管家”,它会根据SQL语句的“骨架”,决定如何执行这条SQL语句才是最有效率的。

选择执行计划:优化器会考虑多种执行方案,比如使用哪个索引、表的连接顺序等等。它会根据表的统计信息、索引的情况,选择出一个最优的执行计划。这就像是你在做旅行计划时,优化器会帮你选择最省时间、最省钱的路线。

索引选择:如果你的SQL语句中有WHERE条件,优化器会决定是否使用索引来加速查询。比如,age > 18这个条件,如果age字段上有索引,优化器可能会选择使用索引来快速定位符合条件的记录。

优化器的目标是让SQL语句执行得更快、更省资源。不过,优化器也不是万能的,有时候它也会做出错误的决定。这时候,你可能需要手动干预,比如通过FORCE INDEX来强制使用某个索引。

六、执行器

经过了优化器的“精心策划”,SQL语句终于来到了执行器。执行器就像是一个“实干家”,它会根据优化器生成的执行计划,真正地去执行这条SQL语句。

调用存储引擎:执行器首先会调用存储引擎的接口,准备读取数据。MySQL的存储引擎有很多种,比如InnoDB、MyISAM等,执行器会根据表的存储引擎类型,调用相应的接口。

读取数据:执行器会根据优化器选择的执行计划,逐步读取数据。比如,如果你的SQL语句中有WHERE条件,执行器会先读取符合条件的数据,然后再返回给客户端。

返回结果:最后,执行器会把查询结果返回给客户端。如果你使用的是命令行工具,结果会直接显示在屏幕上;如果你使用的是编程语言(比如Python、Java),结果会以数据结构的形式返回给你。

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

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

相关文章

秒杀系统的常用架构是什么?怎么设计?

架构 秒杀系统需要单独部署,如果说放在订单服务里面,秒杀的系统压力太大了就会影响正常的用户下单。 常用架构: Redis 数据倾斜问题 第一步扣减库存时 假设现在有 10 个商品需要秒杀,正常情况下,这 10 个商品应该均…

深度生成模型(二)——基本概念与数学建模

上一篇笔记中提到了端到端模型底层核心采用了深度生成模型,先简单梳理一下 生成式人工智能(Artificial Intelligence Generated Content,AIGC)经历了从早期基于概率模型和规则系统的方法到现代深度生成模型的跨越式发展 深度神经…

Oracle 查询表空间使用情况及收缩数据文件

本文介绍Oracle收缩数据文件的相关操作,运维工作中有时会需要通过收缩数据文件来释放磁盘空间。 数据文件初始化方式: 1.我们创建表空间一般有两种方式初始化其数据文件,即指定初始大小为32G(很大的值)或指定初始大小为…

3dtiles平移旋转工具制作

3dtiles平移旋转缩放原理及可视化工具实现 背景 平时工作中,通过cesium平台来搭建一个演示场景是很常见的事情。一般来说,演示场景不需要多完善的功能,但是需要一批三维模型搭建,如厂房、电力设备、园区等。在实际搭建过程中&…

Readability.js 与 Newspaper提取网页内容和元数据

在当今信息爆炸的时代,网页内容的提取和处理变得尤为重要。无论是从新闻网站、博客还是教程网站中提取内容,都需要一个高效、准确的工具来帮助我们去除无关信息,提取出有价值的正文内容。这不仅能够提高我们的工作效率,还能让我们…

Vue框架学习

一、Vue3 基础 创建vue3工程 安装Node.js在你所要存放目录位置 cmd 终端运行 npm create vuelatest输入工程名字需要ts JSX 选No 是否配置路由 NO(初步学习) 是否配置管理 No 是否配置测试 No Testing Solution NO 是否选择ESLint语法检查先不选 选NO…

部署若依微服务遇到的坑

一、用Windows部署nacos 1、启动失败,因为nacos默认开启为器群模式。单体需要加上图下代码 2、nacos配置内置MySQL时需要执行config文件夹下的SQL文件 3、springboot启动报错 java.nio.charset.MalformedInputException: Input length 1或Input length 2-CSDN博…

RabbitMQ系列(三)基本概念之Consumer

在 RabbitMQ 中,Consumer(消费者) 是负责从队列(Queue)中获取并处理消息的客户端角色,其核心机制与功能如下: 一、Consumer 的定义与核心作用 消息处理终端 Consumer 通过订阅或拉取队列中的消…

Trae根据原型设计稿生成微信小程序密码输入框的踩坑记录

一、需求描述 最近经常使用Trae生成一些小组件和功能代码(对Trae赶兴趣的可以看之前的文章《TraeAi上手体验》),刚好在用uniapp开发微信小程序时需要开发一个输入密码的弹框组件,于是想用Trae来实现。原型设计稿如下:…

SuperMap iClient3D for WebGL 影像数据可视范围控制

在共享同一影像底图的服务场景中,如何基于用户权限体系实现差异化的数据可视范围控制?SuperMap iClient3D for WebGL提供了自定义区域影像裁剪的方法。让我们一起看看吧! 一、数据制作 对于上述视频中的地图制作,此处不做讲述&am…

STM32中使用PWM对舵机控制

目录 1、硬件JIE 2、PWM口配置 3、角度转换 4、main函数中应用 5、工程下载连接 1、硬件介绍 单片机:STM32F1 舵机:MG995 2、PWM口配置 20毫秒的PWM脉冲占空比,对舵机控制效果较好 计算的公式: PSC、ARR值的选取&#xf…

5、使用 pgAdmin4 图形化创建和管理 PostgreSQL 数据库

通过上几篇文章我们讲解了如何安装 PostgreSQL 数据库软件和 pgAdmin4 图形化管理工具。 今天我们继续学习如何通过 pgAdmin4 管理工具图形化创建和管理 PostgreSQL 数据库。 一、PostgreSQL的基本工作方式 在学习如何使用PostgreSQL创建数据库之前,我们需要了解一…

Protobuf原理与序列化

本文目录 1. Protobuf介绍2. Protobuf的优势3. 编写Protobuf头部全局定义消息结构具体定义字段类型定义标签号Base128编码 4. TLVProtobuf的TLV编码如何通过Varint表示300? 5. 编译Protobuf6. 构造消息对象 前言:之前写项目的时候只是简单用了下Protobuf…

DeepSeek:面向效率与垂直领域的下一代大语言模型技术解析

本文将深入剖析DeepSeek模型的核心算法架构,揭示其在神经网络技术上的突破性创新,并与主流大模型进行全方位技术对比。文章涵盖模型设计理念、训练范式优化、应用场景差异等关键维度,为读者呈现大语言模型领域的最新发展图景。 一、DeepSeek…

数据安全_笔记系列09_人工智能(AI)与机器学习(ML)在数据安全中的深度应用

数据安全_笔记系列09_人工智能(AI)与机器学习(ML)在数据安全中的深度应用 人工智能与机器学习技术通过自动化、智能化的数据分析,显著提升了数据分类、威胁检测的精度与效率,尤其在处理非结构化数据、复杂…

【Python 语法】Python 数据结构

线性结构(Linear Structures)1. 顺序存储列表(List)元组(Tuple)字符串(String) 2. 线性存储栈(Stack)队列(Queue)双端队列&#xff08…

docker本地镜像源搭建

最近Deepseek大火后,接到任务就是帮客户装Dify,每次都头大,因为docker源不能用,实在没办法,只好自己搭要给本地源。话不多说具体如下: 1、更改docker的配置文件,添加自己的私库地址&#xff0c…

Ae 效果详解:粒子运动场

Ae菜单:效果/模拟/粒子运动场 Simulation/Particle Playground 粒子运动场 Particle Playground效果可以用于创建和控制粒子系统,模拟各种自然现象,如烟雾、火焰、雨水或雪等。通过调整粒子的发射点、速度、方向和其他属性,可以精…

CSS 对齐:深入理解与技巧实践

CSS 对齐:深入理解与技巧实践 引言 在网页设计中,元素的对齐是至关重要的。一个页面中元素的对齐方式直接影响到页面的美观度和用户体验。CSS 提供了丰富的对齐属性,使得开发者可以轻松实现各种对齐效果。本文将深入探讨 CSS 对齐的原理、方法和技巧,帮助开发者更好地掌握…

汽车无钥匙进入一键启动操作正确步骤

汽车智能无钥匙进入和一键启动的技术在近年来比较成熟,不同车型的操作步骤可能略有不同,但基本的流程应该是通用的,不会因为时间变化而有大的改变。 移动管家汽车一键启动无钥匙进入系统通常是通过携带钥匙靠近车辆,然后触摸门把…