💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 46.1\. 查询经过的路径 下面是一个简短的描述,描述一个查询从开始到得到结果要经过的阶段。 1. 首先必须先建立起从应用程序到PostgreSQL服务器的连接。 应用程序向服务器发送查询然后等待接收从服务器返回的结果。 2. _分析器阶段_检查从应用程序(客户端)发送过来的查询, 核对语法并创建一个_查询树_。 3. _重写系统_接收分析阶段来的查询树且搜索任何应用到查询树上的 _规则_(存储在_系统表_里), 并根据给出的 _规则体_进行转换。 重写系统的一个应用就是实现_视图_。 当一个查询访问一个视图时(也就是一个_虚拟表_),重写系统改写用户的查询, 使之成为一个访问在_视图定义_里给出的对_基本表_的查询。 4. _规划器/优化器_接收(改写后的)查询树然后创建一个_查询规划_, 这个查询规划是_执行器_的输入。 它(规划器/优化器)首先创建所有得出相同结果的可能的_路径_。 例如,如果待扫描的关系上有一个索引,那么扫描的路径就有两个。一个可能是简单的顺序查找, 而另一个可能就是使用索引的查找。下一步是计算出不同路径的执行开销, 并且选择和返回开销最少的那条。开销最小的路径然后会被展开成为一个可以供执行器使用的完整的查询规划。 5. 执行器递归地走过_规划树_并且按照规划指定的方式检索数据行。 执行器在对关系进行扫描时使用_存储系统_进行_排序_ 和_连接_,计算_条件_并且最终交回生成的数据行。 在随后的小节里,将对上面的每一个步骤进行更详细的讨论,以便让对PostgreSQL 的内部控制和数据结构有一个更准确的理解。