PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

51.1. 查询执行路径 #

一条 SQL 查询在获取最终结果前,必须依次通过以下五个标准处理阶段:

  1. 首先必须建立客户端应用程序到 PostgreSQL 服务端的物理网络连接。应用程序通过网络向服务端发送查询文本,并等待接收服务端传回的结果数据。

  2. 解析阶段(Parser Stage)对应用程序发送的查询文本执行语法合规性检查,并构建生成初始的语法解析树(Parse Tree),随后经过语义转换生成查询树(Query Tree)。

  3. 规则重写系统(Rewrite System)接收解析阶段输出的查询树,并在系统目录中检索是否存在适用的规则(Rules)。规则系统对查询树执行就地展开与重写。视图(Views)的本质正是基于这一重写机制实现的:每当查询引用视图(即虚拟表)时,重写系统透明地将针对视图的引用替换为对视图底层实际物理基表的检索查询。

  4. 规划器/优化器(Planner/Optimizer)接收经过重写的查询树,对其执行代价估算与物理算子拓扑选型,最终生成作为执行器输入的查询计划(Query Plan)。优化器首先生成通向相同逻辑结果的所有可行物理路径(Paths,如全表顺序扫描或索引扫描),估算各路径所需的 I/O 与 CPU 综合代价,挑选代价最低的廉价路径并将其展开为完整的执行计划树。

  5. 执行器(Executor)递归遍历查询计划树,以拉取管道机制从底层存储引擎逐步读取数据块,执行数据过滤(Quals)、排序(Sort)与表连接(Join),最终将提取出的结果行流式发送回客户端。

后续章节将深入剖析上述各核心控制阶段与底层关键数据结构。