Postgresql LATERAL与INNER JOIN

时间:2018-04-03 07:28:55

标签: sql postgresql join lateral

JOIN

JavaType type = mapper.getTypeFactory().constructParametrizedType(UberObjectWithId.class,
                UberObject.class, MyRequest.class, MyResponse.class);

LATERAL

SELECT *
FROM a
  INNER JOIN (
    SELECT b.id, Count(*) AS Count
    FROM b
    GROUP BY b.id ) AS b ON b.id = a.id;

据我所知,这里的连接将被计算一次,然后与主要请求和每个FROM的请求合并。

在我看来,如果连接会将几行旋转到一帧,那么它会更有效但是如果它是1比1那么LATERAL - 我认为对吗?

1 个答案:

答案 0 :(得分:2)

如果我理解你,你会问两个陈述中的哪一个更有效率。

您可以使用EXPLAIN (ANALYZE)自行测试,我猜答案取决于数据:

  • 如果a中的行数很少,如果LATERAL上有索引,b(id)联接可能会更有效。

  • 如果a中有很多行,第一个查询可能会更有效,因为它可以使用哈希或合并连接。