pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
GEQO模块旨在以类似于旅行商问题(TSP)的方式解决查询优化问题。可能的查询计划被编码为整数串。每个串表示查询中从一个关系到下一个关系的连接顺序。例如,查询树
/\ /\ 2 /\ 3 4 1
会被编码为整数串 '4-1-3-2',这意味着先连接关系 '4' 和 '1',再连接 '3',最后连接 '2';其中 1、2、3、4 是PostgreSQL优化器内部的关系 ID。
GEQO模块的部分内容改编自 D. Whitley 的 Genitor 算法。
PostgreSQL 中 GEQO 实现的具体特征是:
采用稳态 GA(替换种群中适应度最低的个体,而不是整代替换),能够快速收敛到更优的查询计划。这对于在合理时间内处理查询至关重要;
采用边重组交叉,它特别适合在利用 GA 求解 TSP 时将边损失保持在较低水平;
不使用变异作为遗传操作符,因此无须借助修复机制来生成合法的 TSP 回路。
GEQO模块使PostgreSQL查询优化器能够通过非穷举搜索有效支持大型连接查询。
为了改进遗传算法的参数设置,仍有一些工作要做。在文件 backend/optimizer/geqo/geqo_params.c 中的例程gimme_pool_size和gimme_number_generations里,我们必须为参数设置找到一种折中,以满足两个相互竞争的需求:
查询计划的最优性
计算时间
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。