一条SQL语句的执行历程

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 【6月更文挑战第8天】该文介绍了SQL执行的流程。从客户端连接MySQL服务器开始,SQL语句首先尝试命中缓存,如果未找到,则进入解析优化阶段,包括词法和语法解析,并根据内部逻辑优化SQL。接下来是执行阶段,涉及预处理和执行,利用索引等加速查询。最终,执行结果返回给客户端,整个过程包括权限检查、打开表、排序、创建临时表等步骤,完成后清理资源。

在数据库管理系统中,每当你敲下一条SQL,按下执行键的时候,不管这条SQL是简单还是复杂,从按下执行键到返回数据结果展现出来这个过程都是一致的,每一步都有其存在的必要意义。那么下面就来详细分析一条SQL从按下执行键之后经历了哪些过程?

连接客户端

首先你要有一个可以执行SQL的可视化的客户端,并且已经连接好了Mysql服务端,比如这样

命中缓存

然后你编写好一条SQL之后,按下执行键,这个时候客户端就可以向 MySQL 服务发送 SQL 语句了,MySQL 服务收到 SQL  语句后,就会解析出 SQL 语句的第一个字段,看看是什么类型的语句。如果查询语句,MySQL 就会先去查询缓存里查找缓存数据,如果缓存中有这条  SQL对应的数据内容,那么直接返回,如果没有则继续向下执行。

解析优化

在正式执行 SQL 查询语句之前, MySQL 会先对 SQL 语句进行解析,解析包括词法解析,语法解析等,验证你执行的这条 SQL  可以被执行。并且会按照Mysql的内部逻辑对你提供的 SQL 进行优化,优化后的 SQL 会按照索引、主键等优化信息加快 SQL  语句的执行效率。

SQL执行

那么经过解析优化之后,那么你的 SQL 就算进入执行状态了,接着就要进入执行 SQL 查询语句的流程了,每条SELECT 查询语句流程主要可以分为下面这三个阶段:预处理阶段、执行阶段,在这一阶段同样会执行优化,最后执行完成之后就可以成功返回数据了。

执行结果

比如这里有一条 SQL 语句

select * from crm_account_screen_performance_target where target_start_time <='2024-03-18 00:00:00' and target_end_time >= '2024-03-18 00:00:00';

aohr6odutqrw6_7952661613dd4e709117ee34218eb4f6.png

那么我们也可以看一下 SQL 客户端工具对于这条 SQL 执行过程的剖析

aohr6odutqrw6_8a4f33eca9344694a62e11a4023585bd.png

在整个SQL 执行过程中,从你敲下SQL 点击【执行】命令的那一刻,SQL 的历程就开始了starting。SQL会首先校验当前执行 SQL 的用户是否有权限 checking permissions,随后有权限,继续向下打开需要执行的数据表 Opening tables,然后开始初始化 SQL init ,锁定系统执行环境 System lock,随后SQL 执行器会对当前 SQL 进行优化 optimizing 以及 统计 statistics。继续向下看,进入到准备 preparing 阶段,然后数据库服务会创建临时表用于存放临时查询数据 Creating tmp table ,并对查询的结果进行排序 Sorting result,随后执行 executing,执行完成之后发送数据到请求方 Sending data,创建排序索引 Creating sort index,然后结束执行操作 end,随后移除临时表 removing tmp table,本次查询结束 query end,关闭数据库表 closing tables,最后释放整个查询涉及到的操作 freeing items,并记录本次慢查询日志 logging slow query,最后完成全部本次 SQL 执行操作内容并 cleaning up。整个 SQL的执行过程可以通过执行过程中涉及到的命令做一个详细的分析,感兴趣的可以自己尝试看看 SQL 执行过程。

相关文章
|
Java 关系型数据库 数据库连接
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
|
存储 安全 区块链
去中心化存储:数据存储的新范式
去中心化存储:数据存储的新范式
684 91
|
人工智能 Dubbo 应用服务中间件
使用 Apache Dubbo 释放 DeepSeek R1 的全部潜力
本文介绍了如何利用 Apache Dubbo 的多语言 SDK 充分释放 DeepSeek R1 的全部潜力,助力 AI 开发的高效落地。
477 87
|
6月前
|
人工智能 安全 Ubuntu
保姆级教程 | 在Ubuntu上部署Claude CodeUI全过程
Claude Code Plan Mode 是 Anthropic 推出的智能编程助手功能,采用只读分析模式,保障代码安全的同时提供AI驱动的项目规划与风险评估。该模式平均每周为开发者节省27小时,显著提升开发效率与项目成功率,是AI编程领域的重要创新。
3965 10
|
11月前
|
运维 自然语言处理 数据库
Odoo 中文版安装详解
Odoo 是一款支持多语言的企业管理软件,用户可轻松切换至中文界面。本文详解了 Odoo 的手工安装流程,包括 Docker 安装、镜像拉取与容器运行,同时分析了安装中的常见难题,如 Docker 配置复杂、镜像拉取困难及参数设置繁琐等。为简化安装,推荐使用 Websoft9 解决方案,通过其控制台快速部署 Odoo,无需关心底层技术细节,专注于企业管理功能的配置与使用,高效实现系统搭建与运维。
973 1
|
8月前
|
人工智能 数据可视化 Java
性能提升 10 倍, DIFY 模式迁移至 Spring AI Alibaba 模式 零改造实现
将 Dify 应用迁移至 Spring AI Alibaba,可兼顾可视化开发效率与代码工程灵活性,显著提升系统性能与扩展能力,适用于复杂 AI 业务场景。
1122 0
|
Dubbo 应用服务中间件 Apache
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
194 0
|
Java jenkins 应用服务中间件
Spring Boot 中的自动化部署:什么是它,如何使用
Spring Boot 中的自动化部署:什么是它,如何使用
|
12月前
|
Ubuntu Linux Docker
如何在Ubuntu 20.04系统中安装Docker
安装 Docker 引擎的步骤如下:首先更新系统包索引 (`sudo apt update`),安装必要依赖包 (`apt-transport-https` 等),添加 Docker 官方 GPG 密钥及 APT 仓库。接着再次更新包索引并安装 Docker 引擎及相关工具 (`docker-ce` 等)。最后启动 Docker 服务并设置开机自启,通过 `docker --version` 和运行测试容器 (`sudo docker run hello-world`) 验证安装是否成功。
4615 0
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?