2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2

61.1. 将查询处理视为复杂的优化问题 #

在所有关系运算符中,最难处理和优化的是连接。可能的查询计划的数量随着查询中连接的数量呈指数级增长。由于支持多种连接方法(例如,PostgreSQL中的嵌套循环、哈希连接、合并连接)来处理单个连接,以及多种索引(例如,PostgreSQL中的B-tree、哈希、GiST和GIN)作为关系的访问路径,进一步增加了优化的难度。

标准的PostgreSQL查询优化器会在备选策略的空间中执行近乎穷尽的搜索。该算法最初在IBM的System R数据库中引入,可以产生近乎最优的连接顺序,但当查询中的连接数量增加时,可能会花费大量的时间和内存空间。这使得标准的PostgreSQL查询优化器不适用于连接大量表的查询。

德国弗莱贝格矿业技术大学的自动控制研究所发现,当他们希望使用PostgreSQL作为支持电力网维护的决策支持知识库系统的后端时,遇到了一些问题。该数据库系统需要为知识库系统的推理机处理大型连接查询。这些查询中的连接数量之多使得使用标准查询优化器变得不可行。

在下文中,我们将描述一种遗传算法的实现,用于解决连接排序问题,这种方法对于涉及大量连接的查询非常有效。

提交更正

如果您在文档中发现任何不正确之处、与您实际体验不符的内容或需要进一步澄清的地方,请使用此表格报告文档问题。