一条SQL语句的执行流程(上)

本文详细解释了MySQL数据库操作流程,包括连接器连接数据库、分析器解析SQL语句、优化器选择执行策略、执行器操作数据以及查询缓存的工作机制,特别强调了查询缓存在更新频繁场景下的局限性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

  • 连接器 :我们在操作数据库前, 第一步是需要通过账号密码去连接数据库。这里的连接器负责跟客户端建立连接、获取权限、维持和管理连接的。

  • 分析器 :建立完连接后选择对应的数据库, 然后开始写我们的 SQL 语句。写完后去执行 SQL 语句,这时分析器会去识别 SQL 语句里的关键字,知道你是要查询呢, 还是要修改操作。如果你写的语法不对它就会告诉你 “You have an error in your SQL syntax …” ,在哪个位置的附近有错误提醒。

    在这里插入图片描述

  • 优化器 : 走完分析器后,MySQL 已经知道这条 SQL 语句是做什么的。SQL 涉及到多张表时要先查哪一张表呢, 表里有多个索引时要选用哪个呢?这时就需要通过优化器来选择策略,让 MySQL 知道怎么去做。

  • 执行器 :好啦,通过前面两步 MySQL 知道了要做什么,怎么去做。接下来按照选定的方案去对应的存储引擎里操作数据,然后将操作结果返回给客户端。

  • 查询缓存 :缓存存放在一个引用表中,然后通过一个哈希值去引用。这个哈希值是根据 SQL 语句、查询的数据库名、客户端协议版本等数据生成。当你写完 SQL 语句后,如果查询缓存是打开的,MySQL会优先检查这个 SQL 是否命中查询缓存中的数据。如果当前的SQL查询命中了缓存,MySQL会跳过其它阶段直接从缓存中拿取结果返回给客户端(缓存命中检查是通过一个对大小写敏感的哈希查找实现的,字段的大小写都会是缓存失效)

  • 查询缓存大部分时候都用不到,很可能前脚刚刚缓存了查询结果,后脚就插入新数据或者对数据进行修改,这时缓存就没用了。适合用于那些静态表或更新频率不高的表。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伟洪winni

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

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

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

打赏作者

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

抵扣说明:

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

余额充值