代码架构
PostgreSQL 数据库的 查询优化的代码在 src/backend/optimizer 目录下,其中有 plan、 prep、 path、 geqo、 util 共 5 个子目录, plan 是总入口目录,它调用了 prep 目录进行逻辑优化,调用 path、 geqo 目录进行物理优化, util 目 录是一些公共函数,供所有目录使用。
如图所示, Plan模块为总调用模块, Prep和 Path被它调用 。在执行中,从 Plan模块 入口,先调用 Prep 模块进行预处理,再调用 Path 模块进行优化 。 Path 模块中有开关,指示是否启用遗传算法进行优化,如果启用,且连接的表超过 11,就调用 geqo 目录中 的遗传算法进行优化。 util 模块为辅助工具模块,提供其他模块使用的工具函数。
代码目录
prep 目录
主要处理逻辑优化中的逻辑重写的部分,对投影 、选择条件、 集合操作 、 连接操作都进行了重写 ,如图
path 目录
主要是生成物理路径的部分,包括生成扫描路径、连接路径等,如图所示。