美文网首页
MySQL层次结构与SQL语句的执行

MySQL层次结构与SQL语句的执行

作者: 雁阵惊寒_zhn | 来源:发表于2020-10-23 13:28 被阅读0次

    MySQL层次结构

    MySQL层次分为三层,如下图:


    截图自《高性能MySQL》(第三版)
    1. 第一层服务负责连接处理、授权认证、安全等。
    2. 第二层服务包括查询解析、分析、优化、缓存以及所有内置函数,还包括所有跨存储引擎的功能(存储过程、触发器和视图等)。
    3. 第三层服务是存储引擎。负责MySQL中数据的存储和提取。存储引擎提供API与上层服务器通信,这些接口屏蔽了不同引擎之间的差异,对上层的查询过程透明。

    大体上,也可以说MySQL层次有两层,服务层存储引擎层。第一层和第二层归属于服务层。

    SQL语句的执行

    执行SQL

    1. 每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,服务器会缓存线程,所以不需要为每一个新建的连接创建或销毁线程。
    2. 连接MySQL服务器时,服务器需要进行认证。认证成功后,服务器还会继续验证客户端是否具有某个特定查询的权限。
    3. 对于SELECT语句,服务器会先查询缓存,如果能够找到相应的结果,服务器直接返回结果给客户端。
    4. MySQL会解析查询,并创建内部数据结构(解析树)。
    5. 对解析树进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。
    6. 执行SQL语句。

    一条SELECT语句的执行

    按MySQL层次中箭头流向各个组件的顺序,执行如下:

    1. 连接/线程处理
      客户端连接MySQL服务器,与数据库进行连接。因为连接过程比较耗时,所以服务器维护了连接线程的复用。连接时会进行身份和权限的认证。
    2. 查询缓存
      SELECT语句会先在缓存中查询数据。如果缓存没有及时更新,可能产生查询到脏数据。
    3. 解析器
      对SELECT语句进行解析,构建解析树。
    4. 优化器
      此时MySQL服务器已经知道将要做什么了,优化器对要执行的过程进行优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。
    5. 执行
      执行过程不仅调用存储引擎API,获取和返回最终的结果,可能还包括获取和释放锁,验证用户执行权限等操作。在开始执行前,还有验证用户是否具有相应的查询权限,如果没有返回权限错误。如果具有执行权限,打开数据表,调用存储引擎提供的API接口执行SELECT查询操作。最终将所有满足条件的行记录作为结果集返回给客户端。

    相关文章

      网友评论

          本文标题:MySQL层次结构与SQL语句的执行

          本文链接:https://www.haomeiwen.com/subject/puyspktx.html