一条sql查询语句如何执行?

本文详细介绍了MySQL的逻辑架构,包括Server层与存储引擎层的工作原理。深入探讨了MySQL执行SQL语句的过程,从连接器建立连接到执行器返回结果集的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)MySQL的逻辑框架图

在这里插入图片描述
Server 层:包括 连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如 存储过程、触发器、视图等。
存储引擎层:负责数据的存储和提取。其架构模式是插件式的, 支持InnoDB、MyISAM、Memory等多个存储引擎。常用的是InnoDB引擎。

2)连接器

第一步:先连上这个数据库,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接过程是经典的TCP握手。

3)查缓存

第二步:
MySQL拿到一个查询请求后, 会首先查询缓存,看看之前是不是执行过这条语句。之前执行过的语句及结果可能会以Key-Value的形式被存在内存中。 key是查询语句。
大多数情况下不建议查缓存,为什么呢 ?查询缓存的失效非常频繁,只要对一个表的更新,这表上的所有的查询都会被清空。对于更新压力大的表来说,查询缓存的命中率非常低。
可以用可以用 SQL_CACHE 显式指定查询缓存

mysql> select SQL_CACHE * from T where ID=10;

注意:在MySQL 8.0 已经直接去掉缓存功能。

4)分析器

第三步:
如果没有命中缓存, 就需要真正的执行语句。
分析器首先会做“词法分析”,解析出一条SQL字符串中分别是什么 ? 代表什么 ?
语法问题会在这一步做校验。

5)优化器

第四步:
优化器在表里有多个索引的时候,决定使用哪个索引;或者在一个语句有多个表关联的时候,决定各表的连接顺序。

6)执行器

第五步:
上面步骤中分析了SQL,也优化了SQL,于是可以开始执行SQL了。
首先判断一下,账户是否有该表的查询权限;
然后调用InnoDB引擎接口取这表的第一行(如果有索引就是去满足条件的第一行);
再 调用引擎接口取“下一行”,重复相同逻辑, 直到取到这个表的最后一行;
最后 执行器将上述遍历满足条件额结果行组成的记录集作为结果集返回给客户端;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值