• 4.4 查询执行的基础


    MySQL执行一个查询的过程,可以用下图表示:

    我们可以看到当向MySQL发送一个请求的时候,MySQL究竟做了什么:

    1、客户端发送一条查询给服务器。

    2、服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一个阶段。

    3、服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。

    4、MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询。

    5、将结果返回给客户端。

    4.4.1 MySQL客户端/服务器通信协议

    MySQL客户端和服务器之间的通信协议是“半双工”的,这意味着,在任何一个时刻,要么是由服务器向客户端发送数据,要么是由客户端向服务器发送数据,这两个动作不能同时发生。

    4.4.2 查询缓存

    在解析一个查询语句之前,如果查询缓存是打开的,俺么MySQL会优先检查这个查询是否命中查询缓存中的数据。这个检查是通过一个对大小写敏感的哈希查找实现的。查询和缓存中的查询即使只有一个字节不同,那也不会匹配缓存结果,这种情况下查询就会进入下一个阶段的处理。

    4.4.3 查询优化处理

    查询的生命周期的下一步是将一个SQL转换成一个执行计划,MySQL再依照这个执行计划和存储引擎之间进行交互。这包括多个子阶段:解析SQL、预处理、优化SQL执行计划这个过程中的任何错误都可能终止查询。

    4.4.4 查询执行引擎

    在解析和优化阶段,MySQL将生成查询对应的执行计划,MySQL的查询执行引擎则根据这个执行计划来完成整个查询。

    4.4.5 返回结果给客户端

    查询执行的最后一个阶段是将结果返回给客户端。即使查询不需要返回结果集给客户端,MySQL仍然会返回这个查询的一些信息,如该查询影响到的行数。如果查询可以被缓存,那么MySQL在这个阶段也会将结果存放到查询缓存中。

  • 相关阅读:
    java数据库访问类和接口
    数据删除的用法
    短信发送(M800)
    Spring注解开发(六)扩展原理
    观察者模式(Obeserver Pattern)
    Spring注解开发(五)声明式事务
    Spring注解开发(四)AOP原理与源码分析
    Spring注解开发(三)属性赋值与自动装配
    Spring注解开发(二)生命周期
    Spring注解开发(一)组件注册
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10132723.html
Copyright © 2020-2023  润新知