欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在 PostgreSQL 中玩转遗传查询优化 (GEQO):深度解析与实践指南

最编程 2024-02-22 12:50:12
...

59.3.1. 用GEQO产生可能的计划

GEQO规划处理使用标准的规划器代码来产生用于扫描个体关系的计划。然后使用遗传方法发展连接计划。如上所示,每一个候选连接计划被表示为一个连接基本关系的序列。在初始阶段,GEQO代码简单地随机产生某些可能的连接序列。对于被考虑的每一个连接序列,标准规划器代码被调用来估算使用该序列执行查询的代价(对于连接序列的每一步,所有三种连接策略都被考虑;并且所有初始决定的关系扫描计划都可用。估计的代价是这些可能性中最低的那个。)。具有较低估计代价的连接序列被认为比具有较高代价的更适合。遗传算法会丢弃最不适应的候选。然后通过组合更适合的候选的基因来产生新的候选 — 即使从已知代价低的连接序列随机选择片段来创建用于考虑的新序列。这个处理将被重复,直到已经考虑的连接序列的数量达到一个预设值。然后在搜索中任何时候找到的最好的一个将被用来产生最终的计划。

由于在初始种群选择和后续最佳候选的变异过程中都采用了随机选择,所以这种处理天生就是非确定性的。要避免被选中计划发生出乎意料的改变,每次 GEQO 算法的运行都会使用当前geqo_seed参数设置来重启它的随机数生成器。只要geqo_seed以及其他 GEQO 参数保持固定(以及其他规划器输入,如统计信息),对一个给定的查询将产生相同的计划。要试验不同的搜索路径,可以尝试改变geqo_seed