2024年9月26日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2

50.1. 查询的路径 #

这里我们将简要概述查询要经过的各个阶段才能获取结果。

  1. 应用程序程序与 PostgreSQL 服务器之间需要建立连接。应用程序程序将查询传输到服务器并等待接收服务器发回的结果。

  2. 解析阶段 检查应用程序程序传输的查询的语法是否正确,并创建一个查询树

  3. 重写系统 获取解析阶段创建的查询树,并查找要应用于查询树的任何规则(存储在系统目录中)。它执行规则体中给出的转换。

    重写系统的一个应用是在实现视图方面。只要对视图(即虚拟表)进行查询,重写系统就会将用户的查询重写为一个查询,该查询访问视图定义中给出的基础表

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

    它通过首先创建所有可能导致相同结果的路径来做到这一点。例如,如果要扫描的关系上存在索引,则扫描有两种路径。一种可能性是简单的顺序扫描,另一种可能性是使用索引。接下来估计每个路径执行的成本,并选择最便宜的路径。最便宜的路径将扩展为执行器可以使用的一个完整计划。

  5. 执行器递归遍历计划树,并以计划表示的方式检索行。执行器在扫描关系时使用存储系统,执行排序连接,评估资格,最后返回派生的行。

在接下来的几节中,我们将更详细地介绍上述每个项目,以更好地了解 PostgreSQL 的内部控制和数据结构。

提交更正

如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表单 报告文档问题。