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

51.1. 查询路径 #

这里我们简要概述查询为了获得结果必须经过的阶段。

  1. 必须建立应用程序与PostgreSQL服务器的连接。应用程序将查询传输给服务器,并等待接收服务器返回的结果。

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

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

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

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

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

  5. 执行器递归地遍历计划树,并按照计划所代表的方式检索行。执行器在扫描关系时利用存储系统,执行排序连接,评估条件,并最终返回派生的行。

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

提交更正

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