一条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';

在这里插入图片描述
那么我们也可以看一下 SQL 客户端工具对于这条 SQL 执行过程的剖析
在这里插入图片描述
在整个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 执行过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn565973850

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值