查询语句更新流程
更新流程前边和查询一样也要走一遍查询,因为更新之前必须拿到(查询)更新的数据,先上一张流程图,然后看详细阅读下面的各个步骤。
![image-20230605152153195](https://i-blog.csdnimg.cn/blog_migrate/bd224c98db3c78ebcef06953b108e7db.png)
执行流程:
1.「连接验证」
需要MySQL客户端登录,需要一个 连接器 来连接用户和MySQL数据库,“mysql -u 用户名 -p 密码” 进行MySQL登录,在完成 TCP握手 后,连接器会根据输入的用户名和密码验证登录身份。
MySQL服务端和客户端的通信方式采用的是「半双工协议」。通信的时候,数据可以双向传输,但是同一时间只能有一台服务器在发送数据。
2.「查询缓存」
mysql8之后就去掉了查询缓存,因为太鸡肋了。当数据表发生修改时,涉及到这个表的查询缓存都会失效。这可能导致过多的缓存失效,并引发不一致的数据查询结果。
可以用过sql查看查询缓存是否开启。
SHOW VARIABLES LIKE 'query_cache_type';
3.「分析器」
语法此法分析,在这里首先会把整个sql打碎,并且能够识别关键字和非关键字,根据sql语句生成一个数据结构,也叫做解析树。
4.「预处理」
检查表名和字段名等相关信息合法性。
5.「优化器」
根据解析树生成不同的执行计划,然后选取一中最优的执行计划,哪种执行计划开销小就选择哪种。
优化器可以做哪些事情:
-
查询重写:将复杂的查询语句转换为等效但更简单的形式,以减少计算和存储成本。 -
查询优化:考虑多种执行策略和连接方式,并估计每个选择的成本,以选择最优的执行计划。 -
索引选择 -
连接顺序优化