• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    一篇文章弄懂MySQL查询语句的执行过程

    前言

    需要从数据库检索某些符合要求的数据,我们很容易写出 Select A B C FROM T WHERE ID = XX  这样的SQL,那么当我们向数据库发送这样一个请求时,数据库到底做了什么?

    我们今天以MYSQL为例,揭示一下MySQL数据库的查询过程,并让大家对数据库里的一些零件有所了解。

    MYSQL架构

    mysql架构

    MySQL 主要可以分为 Server 层和存储引擎层。

    Server层 包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图、函数等,还有个通用的日志模块binlog日志模块;

    存储引擎层 负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB(支持事务),它从 MySQL5.5.5 版本开始成为默认存储引擎。

    连接器

    连接器主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作。

    如果用户密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。

    如果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限,之后在这个连接里的权限逻辑判断都是会依赖此时读取到的权限数据,也就是说,后续只要这个连接不断开,即时管理员修改了该用户的权限,该用户也是不受影响的。

    查询缓存( Query cache)

    客户端与服务端建立连接后,MySQL 在执行查询语句时会先查询缓存,校验这条SQL是不是在之前执行过。之前执行过的语句及其结果会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个value 就会被直接返回给客户端。如果没有命中,则需要执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。

    看到这里大家会不会眼前一亮,会不会有这个功能很好要好好利用的冲动。

    其实这里并不建议使用查询缓存,查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非是那种很长时间不会更新的表,比如系统配置表,但是这种系统配置我们放在配置平台不好吗?

    在MYSQL8.0中已经删除了查询缓存这个功能,官方也是认为该功能在实际的应用场景比较少,所以干脆直接删掉了。

    分析器

    Mysql没有命中查询缓存,那么就会进入分析器,分析器主要是用来分析SQL语句是来干嘛的。分析器主要分为以下两步:

    词法分析程序将整个查询语句分解成各类标志,语法分析根据定义的系统语言将“各类标志”转为对MySQL有意义的组合。最后系统生成一个语法树(AST),语法树便是优化器依赖的数据结构。

    优化器

    经过了分析器,MySQL 就知道你要做什么了。在开始执行之前,还要先经过优化器的处理。

    为什么需要优化器?

    总之优化器是对语法分析树的形态进行修改,把语法分析树变为查询树,确定执行方案。

    执行器

    MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。

    开始执行的时候,要先校验改用户是否有执行查询的权限,如果没有,就会返回没有权限的错误。如果有权限,就会去调用引擎的接口,返回接口执行的结果。

    语句分析

    我们以下面一条真实SQL查询语句来进行分析下MYSQL查询的执行过程

    select id,name,sex,phoone from user t where t.age='26' and t.account='javadaily'
    
    

    a. 先查询 account=javadaily 的用户,然后判断 age 是否等于26 b. 先找出 age=26 的用户,再查询 account=javadaily 的用户

    总结

    到此这篇关于一篇文章弄懂MySQL查询语句的执行过程的文章就介绍到这了,更多相关MySQL查询执行过程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 详解MySQL 查询语句的执行过程
    • Python使用sql语句对mysql数据库多条件模糊查询的思路详解
    • mysql查询的控制语句图文详解
    • Mysql将查询结果集转换为JSON数据的实例代码
    • 使用Visual Studio Code连接MySql数据库并进行查询
    • MySQL查询优化之查询慢原因和解决技巧
    • mysql聚合统计数据查询缓慢的优化方法
    • MySQL多表查询的具体实例
    • mysql从一张表查询批量数据并插入到另一表中的完整实例
    • 分析mysql中一条SQL查询语句是如何执行的
    上一篇:详解MySQL主从复制及读写分离
    下一篇:MySQL sql_mode修改不生效的原因及解决
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    一篇文章弄懂MySQL查询语句的执行过程 一篇,文章,弄懂,MySQL,查询,