50.1. 查询的路径 #
这里将简要概述一个查询为得到结果必须经过的各个阶段。
必须先建立从应用程序到 PostgreSQL 服务器的连接。应用程序将查询发送给服务器,并等待接收服务器返回的结果。
解析器阶段检查应用程序传来的查询是否具有正确的语法,并创建一棵查询树。
重写系统接收由解析器阶段创建的查询树,并查找任何可应用于该查询树的规则(存储在系统目录中)。它执行这些规则体中给出的转换。
重写系统的一个应用是实现视图。每当对一个视图(即虚拟表)发出查询时,重写系统都会将用户的查询重写成一个改为访问视图定义中给出的基表的查询。
规划器/优化器接收(重写后的)查询树,并创建一个查询计划,将作为执行器的输入。
它首先生成所有能得到同一结果的可能路径。例如,如果待扫描的某个关系上有一个索引,那么该扫描就有两条路径:一种是简单的顺序扫描,另一种是使用该索引。接着会估算执行每条路径的代价,并选择代价最低的路径。代价最低的路径会被展开成一个完整的计划,供执行器使用。
执行器会递归地遍历计划树,并以计划所表示的方式提取行。执行器在扫描关系时会使用存储系统,执行排序和连接,计算限定条件,最后返回得到的行。
在后续各节中,我们将更详细地介绍上述各项内容,以便更好地理解 PostgreSQL 的内部控制和数据结构。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.