Postgres JOIN实施

tau*_*tau 5 sql postgresql join relational-database

有人可以解释或指向一个资源,解释关系数据库(如Postgres或MySQL,我更多地使用Postgres)如何实现joins?

例如,我可以粗略地告诉您,索引可能由B树组成,其中节点是条件中可能存在的条件where.只要更改涉及索引(如a insert),就会建立此索引.而从这个信息,我可以假设一个没有索引的列会以更快insert和索引可能无法与某些搜索,如帮助regexlike模式匹配.

我希望对你做一个或多个joins 时会发生什么有相似或更好的理解.

rof*_*fls 9

在Postgresql中,planner/optimizer计算以下3种方法中的哪一种(来自PostgreSQL 文档):

嵌套循环连接:对于左关系中找到的每一行,扫描一次正确的关系.该策略易于实施,但可能非常耗时.(但是,如果可以使用索引扫描扫描正确的关系,这可能是一个很好的策略.可以使用左关系的当前行中的值作为右侧索引扫描的键.)

合并连接:在连接开始之前,每个关系都在连接属性上排序.然后并行扫描两个关系,并组合匹配的行以形成连接行.这种连接更具吸引力,因为每个关系只需要扫描一次.可以通过显式排序步骤或通过使用连接键上的索引以正确的顺序扫描关系来实现所需的排序.

散列连接:首先扫描正确的关系并将其加载到散列表中,使用其连接属性作为散列键.接下来扫描左关系,并将找到的每一行的相应值用作散列键,以定位表中的匹配行.

  • 正是我正在寻找的信息。我也不知道 postgres 手册有这么详细。谢谢! (2认同)