在所有关系运算中,最难处理和优化的是连接。 可能的查询计划数量会随着查询中连接数量的增长而呈指数级增长。进一步的 优化负担还来自于对多种连接方法(例如 PostgreSQL 中的嵌套循环连接、哈希连接、归并 连接)的支持,以及对多种索引(例如 PostgreSQL 中的 B-tree、哈希、GiST 和 GIN) 作为关系访问路径的支持。
PostgreSQL 的常规查询优化器会在各种备选 策略的空间上进行近乎穷举的搜索。这一算法最早 出现于 IBM 的 System R 数据库,能够产生接近最优的连接顺序,但当查询中 的连接数量变大时,可能耗费大量的时间和内存。这使得常规的 PostgreSQL 查询优化器不适合连接大量表的 查询。
德国弗莱贝格矿业与技术大学的自动控制研究所曾想把 PostgreSQL 用作一个用于电网维护的决策支持 知识库系统的后端,期间遇到了一些问题。该 DBMS 需要为知识库系统的推理 机处理大型连接查询。这些查询中的连接数量使得使用常规查询优化器变得 不可行。
下文将介绍一种遗传算法的实现,它以一种对包含 大量连接的查询高效的方式来解决连接顺序问题。