Postgres连接实现

6

有人能否解释一下,或者指向一个解释关系型数据库(如Postgres或MySQL,我更多地使用Postgres)如何实现“join”的资源?

例如,我可以大致告诉您,索引可能由B树构成,其中节点是可能存在于where子句中的条件。每当涉及索引的更改(如插入)时,就会构建此索引。从这些信息中,我可以假设未索引的列在插入时速度更快,并且索引可能无法帮助某些搜索,例如正则表达式或类似模式匹配。

我希望能够了解当您执行一个或多个“join”时会发生什么,甚至更好。


嘘,https://dev59.com/o2gv5IYBdhLWcg3wYvyi#10657906 - wildplasser
1个回答

10
在Postgresql中,规划器/优化器计算使用以下3种方法的哪种(来自PostgreSQL文档):documentation
1. 嵌套循环连接:对于左关系中找到的每一行,右关系会被扫描一次。这种策略易于实现但可能非常耗时。(但是,如果可以使用索引扫描扫描右侧关系,则可以是一个好策略。可以将左侧关系当前行的值用作右侧索引扫描的键。) 2. 合并连接:在连接开始之前,每个关系都按连接属性排序。然后两个关系并行扫描,并组合匹配行以形成连接行。这种连接更具吸引力,因为每个关系只需要扫描一次。所需的排序可以通过显式排序步骤或通过使用加入键的索引以正确顺序扫描关系来实现。 3. 散列连接:首先扫描并将右关系加载到哈希表中,使用其连接属性作为哈希键。接下来扫描左侧关系,并使用找到的每一行的适当值作为哈希键,在表中定位匹配行。

2
这正是我在寻找的信息。我也不知道Postgres手册会详细到那个程度。谢谢! - tau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接