登录
52.1. 查询路径#
在此,我们简要概述查询获取结果必须经过的阶段。
必须建立从应用程序到 PostgreSQL 服务器的连接。应用程序将查询传输到服务器,并等待接收服务器发回的结果。
解析器阶段检查应用程序传输的查询的语法是否正确,并创建一个查询树。
重写系统获取解析器阶段创建的查询树,并查找要应用于查询树的任何规则(存储在系统目录中)。它执行规则主体中给出的转换。
重写系统的一个应用是实现视图。每当对视图(即虚拟表)进行查询时,重写系统都会将用户的查询重写为访问视图定义中给出的基本表的查询。
规划器/优化器获取(重写的)查询树,并创建一个查询计划,该计划将作为执行器的输入。
它首先通过创建所有可能导致相同结果的路径来实现此目的。例如,如果要扫描的关系上有索引,则扫描有两个路径。一种可能是简单的顺序扫描,另一种可能是使用索引。接下来,估算执行每条路径的成本,并选择成本最低的路径。将成本最低的路径扩展为执行器可以使用的完整计划。
执行器递归地遍历计划树,并以计划表示的方式检索行。执行器在扫描关系时使用存储系统,执行排序和联接,评估限定条件,最后返回派生的行。
在以下部分中,我们将更详细地介绍上述每项,以便更好地了解PostgreSQL的内部控制和数据结构。