Postgres 里的基因查询优化(GEQO)
GEQO 模块是试图解决类似漫游推销员问题(
TSP)的查询优化问题的.可能的查询规划被当作整数字串进行编码.每个字串代表查询里面一个关系到下一个关系的
join
的顺序.例如,下面的查询树
/\
/\ 2
/\ 3
4 1
是用整数字串 '4-1-3-2' 编码的,这就是说,首先联接关系 '4' 和 '1',然后
'3',然后是 '2',这里的 1,2,3,4都是
Postgres
里的关系标识(relids)。
GEQO 模块的一部分是采用的 D. Whitley 的
Genitor 算法.
在 Postgres 里的 GEQO
实现的一些特性是:
稳定状态 (steady state) GA
的使用(替换全体中最小健康度的个体,而不是整代的替换)允许向改进了的查询规划快速逼近.这一点对在有效时间内处理查询是非常重要的;
边缘重组交叉 (edge recombination
crossover ) 的使用特别适于在用GA 解决 TSP
问题时保持边缘损失最低。
否决了把突变(Mutation)作为基因操作符的做法,这样生成合法的 TSP
漫游时不需要修复机制.
与
Postgres 的查询优化器实现相比较,
GEQO
模块对
Postgres DBMS 有下面的贡献:
通过非完全搜索对大的 join (联接)查询进行操作;
改善了查询规划的开销尺寸的近似值,因为不需要做规划融合了(GEQO
模块把查询规划的开销当作一个个体来评估).