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

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

普通的PostgreSQL查询优化器执行近乎穷尽的搜索在替代战略的空间上。该算法首先在IBM的System R数据库中引入,生成一个接近最优的联接顺序,但当查询中的联接数量增加时,可能会占用大量的时间和内存空间。这使得普通的PostgreSQL查询优化器不适合连接大量表的查询。

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

下面我们将介绍遗传算法以对涉及大量联接的查询有效的方式解决联接排序问题。