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

60.1. 查询处理作为复杂优化问题 #

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

正常的PostgreSQL 查询优化器对替代策略空间执行近乎穷举搜索。此算法最初是在 IBM 的 System R 数据库中引入的,它会生成一个接近最佳的连接顺序,但在查询中连接数增多时,会花费大量的时间和内存空间。这使得普通的PostgreSQL 查询优化器不适合于连接大量表的查询。

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

接下来,我们将描述遗传算法的实现,以一种对涉及大量连接的查询有效的方式来解决连接顺序问题。

提交更正

如果您在文档中发现任何不正确的地方,与您对特定功能的体验不符,或者需要进一步澄清,请使用此表格 报告文档问题。