一条SQL语句的执行历程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 【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动态分页查询数据经典案例(含代码以及测试)
|
SQL 关系型数据库 MySQL
经典SQL练习题(MySQL版)
选取了一些经典的SQL练习题,附上了代码和运行结果。
20401 1
|
存储 缓存 Java
Infinispan篇(一):一个被遗忘了的分布式集群缓存系统
Infinispan 是一个开源内存数据网格,提供灵活的部署选项和强大的数据存储、管理和处理功能。
2318 0
|
7月前
|
存储 安全 区块链
去中心化存储:数据存储的新范式
去中心化存储:数据存储的新范式
366 91
|
7月前
|
人工智能 Dubbo 应用服务中间件
使用 Apache Dubbo 释放 DeepSeek R1 的全部潜力
本文介绍了如何利用 Apache Dubbo 的多语言 SDK 充分释放 DeepSeek R1 的全部潜力,助力 AI 开发的高效落地。
292 89
|
9月前
|
机器学习/深度学习 人工智能 JSON
【实战干货】AI大模型工程应用于车联网场景的实战总结
本文介绍了图像生成技术在AIGC领域的发展历程、关键技术和当前趋势,以及这些技术如何应用于新能源汽车行业的车联网服务中。
914 94
|
6月前
|
Dubbo 应用服务中间件 Apache
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
|
缓存 前端开发 JavaScript
优化的艺术:提升网站性能的十大关键技术策略
【7月更文第9天】在当今快速发展的互联网时代,网站性能直接影响用户体验和业务转化率。一个高性能的网站不仅能够吸引并留住用户,还能在搜索引擎排名中占据有利位置。本文将深入探讨提升网站性能的十大关键技术策略,并提供实用的代码示例帮助开发者实施这些优化措施。
826 3
|
11月前
|
存储 SQL 缓存
SQL Server存储过程的优缺点
【10月更文挑战第22天】存储过程具有代码复用性高、性能优化、增强数据安全性、提高可维护性和减少网络流量等优点,但也存在调试困难、移植性差、增加数据库服务器负载和版本控制复杂等缺点。
417 1
|
Java jenkins 应用服务中间件
Spring Boot 中的自动化部署:什么是它,如何使用
Spring Boot 中的自动化部署:什么是它,如何使用