-
连接器 :我们在操作数据库前, 第一步是需要通过账号密码去连接数据库。这里的连接器负责跟客户端建立连接、获取权限、维持和管理连接的。
-
分析器 :建立完连接后选择对应的数据库, 然后开始写我们的 SQL 语句。写完后去执行 SQL 语句,这时分析器会去识别 SQL 语句里的关键字,知道你是要查询呢, 还是要修改操作。如果你写的语法不对它就会告诉你 “You have an error in your SQL syntax …” ,在哪个位置的附近有错误提醒。
-
优化器 : 走完分析器后,MySQL 已经知道这条 SQL 语句是做什么的。SQL 涉及到多张表时要先查哪一张表呢, 表里有多个索引时要选用哪个呢?这时就需要通过优化器来选择策略,让 MySQL 知道怎么去做。
-
执行器 :好啦,通过前面两步 MySQL 知道了要做什么,怎么去做。接下来按照选定的方案去对应的存储引擎里操作数据,然后将操作结果返回给客户端。
-
查询缓存 :缓存存放在一个引用表中,然后通过一个哈希值去引用。这个哈希值是根据 SQL 语句、查询的数据库名、客户端协议版本等数据生成。当你写完 SQL 语句后,如果查询缓存是打开的,MySQL会优先检查这个 SQL 是否命中查询缓存中的数据。如果当前的SQL查询命中了缓存,MySQL会跳过其它阶段直接从缓存中拿取结果返回给客户端(缓存命中检查是通过一个对大小写敏感的哈希查找实现的,字段的大小写都会是缓存失效)
-
查询缓存大部分时候都用不到,很可能前脚刚刚缓存了查询结果,后脚就插入新数据或者对数据进行修改,这时缓存就没用了。适合用于那些静态表或更新频率不高的表。
一条SQL语句的执行流程(上)
于 2024-01-11 10:41:18 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)