zoukankan      html  css  js  c++  java
  • 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在这个阶段也会将结果存放到查询缓存中。

  • 相关阅读:
    一个matlab小程序:挑出沪市A股年报与一季度报在同一天发布的股票
    AWK
    matlab搜索路径
    从新浪财经上下载交易明细数据并统计每天的买卖笔数(shell 命令行)
    AWK截取字符串
    tar GNU
    工作效率上的错觉(转载)
    matlab双精度浮点数编码及区间覆盖(原创)
    DNS服务器设置(Ubuntu10.04)
    sed
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10132723.html
Copyright © 2011-2022 走看看