57、postgresql 查询流程
在这里,我们简要概述了查询必须经过的阶段才能获得结果。
-
必须建立从应用程序到 PostgreSQL 服务器的连接。应用程序将查询传输到服务器,并等待接收服务器发回的结果。
-
解析器阶段检查应用程序传输的查询语法是否正确,并创建查询树。
-
重写系统采用解析器阶段创建的查询树,并查找要应用于查询树的任何规则(存储在系统目录中)。它执行规则正文中给出的转换。
重写系统的一个应用是视图的实现。每当对视图(即虚拟表)进行查询时,重写系统都会将用户的查询重写为访问视图定义中给定的基表的查询。
-
计划器/优化器采用(重写的)查询树并创建一个查询计划,该计划将作为执行器的输入。
它通过首先创建导致相同结果的所有可能路径来实现此目的。例如,如果要扫描的关系上有索引,则扫描有两条路径。一种可能性是简单的顺序扫描,另一种可能性是使用索引。接下来,估计每条路径的执行成本,并选择最便宜的路径。最便宜的路径被扩展为执行者可以使用的完整计划。
-
执行器以递归方式单步执行计划树,并以计划表示的方式检索行。执行程序在扫描关系时使用存储系统,执行排序和联接,评估资格,最后交还派生的行。