在所有关系运算符中,最难处理和优化的是连接。查询中连接的数量会随着查询中连接的数量呈指数级增长。进一步的优化工作是由支持各种连接方法(例如,PostgreSQL 中的嵌套循环、哈希连接、合并连接)来处理各个连接以及作为关系访问路径的各种索引(例如,PostgreSQL 中的 B 树、哈希、GiST 和 GIN)引起的。
正常的PostgreSQL 查询优化器对备选策略空间执行近乎穷举搜索。该算法最初在 IBM 的 System R 数据库中引入,它会生成近乎最优的连接顺序,但当查询中的连接数量增长较多时,可能需要大量的执行时间和内存空间。这使得普通的PostgreSQL 查询优化器不适合连接大量表的查询。
德国弗赖贝格矿业大学自动控制研究所,在希望将PostgreSQL 用作电网维护决策支持知识系统的后端时遇到了一些问题。该 DBMS 需要处理知识系统的推理机器的大连接查询。这些查询中的连接数量使得使用普通查询优化器变得不可行。
在下面,我们将描述遗传算法的实现,以有效解决涉及大量连接的查询中的连接排序问题。