Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17 / 18

51.1. 查询的路径 #

这里将简要概述一个查询为得到结果必须经过的各个阶段。

  1. 必须先建立从应用程序到 PostgreSQL 服务器的连接。应用程序将查询发送给服务器,并等待接收服务器返回的结果。

  2. 解析器阶段检查应用程序传来的查询是否具有正确的语法,并创建一棵 查询树

  3. 重写系统接收由解析器阶段创建的查询树,并查找任何可应用于该查询树的 规则(存储在 系统目录 中)。它执行这些 规则体 中给出的转换。

    重写系统的一个应用是实现 视图。每当对一个视图(即 虚拟表)发出查询时,重写系统都会将用户的查询重写成一个改为访问 视图定义中给出的 基表 的查询。

  4. 规划器/优化器接收(重写后的)查询树,并创建一个查询计划,将作为 执行器 的输入。

    它首先生成所有能得到同一结果的可能 路径。例如,如果待扫描的某个关系上有一个索引,那么该扫描就有两条路径:一种是简单的顺序扫描,另一种是使用该索引。接着会估算执行每条路径的代价,并选择代价最低的路径。代价最低的路径会被展开成一个完整的计划,供执行器使用。

  5. 执行器会递归地遍历 计划树,并以计划所表示的方式提取行。执行器在扫描关系时会使用 存储系统,执行 排序连接,计算 限定条件,最后返回得到的行。

在后续各节中,我们将更详细地介绍上述各项内容,以便更好地理解 PostgreSQL 的内部控制和数据结构。