在所有关系运算符中,连接是最难处理和优化的一个。查询计划的可能性随着查询中连接数的增加呈指数级增长。由于支持各种连接方法(例如,在PostgreSQL 中的嵌套循环、哈希连接、合并连接)来处理单个连接以及各种索引(例如,在PostgreSQL 中的 B 树、哈希、GiST 和 GIN)作为关系的访问路径,因此需要进一步的优化工作。
正常的PostgreSQL 查询优化器对替代策略空间执行近乎穷举搜索。此算法最初是在 IBM 的 System R 数据库中引入的,它会生成一个接近最佳的连接顺序,但在查询中连接数增多时,会花费大量的时间和内存空间。这使得普通的PostgreSQL 查询优化器不适合于连接大量表的查询。
德国弗莱贝格矿业与技术大学自动控制研究所遇到了一个问题,当他们想要使用PostgreSQL 作为电力网维护决策支持知识库系统的后端时。DBMS 需要处理知识库系统推理机的大型连接查询。这些查询中的连接数量使得使用普通查询优化器变得不可行。
接下来,我们将描述遗传算法的实现,以一种对涉及大量连接的查询有效的方式来解决连接顺序问题。
如果您在文档中发现任何不正确的地方,与您对特定功能的体验不符,或者需要进一步澄清,请使用此表格 报告文档问题。