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