返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

48.3. PostgreSQL 里的基因查询优化(GEQO)

发布于 2019-09-30 03:13:46 字数 1106 浏览 1103 评论 0 收藏 0

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 查询优化器可以通过非穷举搜索有效地支持大的连接查询。

48.3.1. PostgreSQL GEQO 未来的实现任务

还需要一些工作来改进基因算法的参数设置。在文件 src/backend/optimizer/geqo/geqo_main.c 里的过程 gimme_pool_sizegimme_number_generations 在设置参数时不得不为两个竞争需求做出折衷:

  • 查询规划的优化

  • 计算处理时间

在最基本的层面上,并不清楚用给 TSP 涉及的 GA 算法解决查询优化的问题是否合适。在 TSP 的情况下,与任何子字符串(部分旅游)相关的开销都是独立于旅游的其它部分的,但是目前,这一点对于查询优化是不同的。因此,可以怀疑边缘重组交叉是否最有效的突变过程。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文