59.1. 查询处理是一个复杂的优化问题

在所有关系运算符中,最难处理和优化的是* join 。可能的查询计划的数量随着查询中联接的数量呈指数增长。进一步的优化工作是由对各种 join 方法*(例如,嵌套循环,哈希联接,PostgreSQL 中的合并联接)的支持引起的,以处理单个联接和各种* indexs *(例如,B 树,哈希, PostgreSQL 中的 GiST 和 GIN)作为关系的访问路径。

普通的 PostgreSQL 查询优化器在替代策略的空间上执行“近乎详尽的搜索”。该算法最初在 IBM 的 System R 数据库中引入,产生了接近最佳的连接 Sequences,但是当查询中的连接数量增加时,可能会花费大量的时间和内存空间。这使得普通的 PostgreSQL 查询优化器不适用于连接大量表的查询。

位于德国弗赖贝格的采矿技术大学自动控制研究所在想要使用 PostgreSQL 作为基于决策支持知识的系统维护电网的后端时遇到了一些问题。 DBMS 需要为基于知识的系统的推理机处理大型联接查询。使用普通查询优化器进行的这些查询中的联接数不可行。

在下文中,我们描述了一种遗传算法的实现,以一种对涉及大量联接的查询有效的方式来解决联接排序问题。