数据库的查询流程, 2022-08-11

(2022.08.11 Thur)
对数据库查询,按其处理流程可分为

  • 客户端的请求被数据库连接器接收
  • server层处理
  • 存储引擎处理
  • 返回结果

(2022.08.12 Fri)
基本流程框图如下


MySQL query processing

其中的连接器常被认为是server layer的一部分。

  • 连接器
    连接器负责跟客户端建立连接、获取权限、维持和管理连接
  • 查询缓存
    服务的查询缓存,如果能找到对应的查询,则不必进行查询解析,优化,执行等过程,直接返回缓存中的结果集。运行独立的缓存服务,在架构层面优化了查询速度。
  • 服务器层
    服务器层分为多个部分,包括parser解析器,optimiser优化器,和执行器。
    • parser
      在将查询转换为关系代数后,数据库执行三个方面的检测,即解析,syntax check,semantic check和Shared pool check。
      • Syntax check语法检测 - 检测SQL语法可用性,如SLECT * FM table_a这个查询中的SLECTFM都是错误拼写,由语法检测不愁检测出
      • Semantic check语义检测 - 检测查询语句是否有意义,比如FROM table_x这个语句中的表名table_x不存在,则在语义检测被查出
      • Shared Pool check共享池检测 - 在执行过程中每个查询都拥有一个哈希码,共享池检测将决定写入哈希码是否存在于共享池中。若存在,则DBMS将不再执行优化和执行的步骤,这种情况被称为soft parsing。相对应的,需要完成优化和执行的parsing称为hard parsing。
    • Optimiser优化器
      在优化阶段,数据库针对DML命令执行hard parsing,并在parse过程中优化。这个过程中,数据库检测满足一个查询的多种查询执行方案(execution plan),并选出其中最高效的查询方案用于执行,执行方案保存在数据库目录(db catalog)中。
    • Row source generation行源生成
      行源生成用于从优化器接收最优执行方案,并产生被数据库其他部分使用的迭代执行方案(iterative execution plan)。迭代执行方案指的是被SQL引擎执行时会生成结果集的二元程序(binary programme)。

经过了服务器层的处理,执行方案被送往存储引擎进行查询,并返回结果。

Reference

1 SQL query processing, Geeksforgeeks
2 MYSQL查询和插入数据的流程是怎样的,大魔王先生,博客园
3 详解mysql更新执行步骤,乔帮主,

你可能感兴趣的:(数据库的查询流程, 2022-08-11)