3

加入

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

SELECT *
FROM a,
  LATERAL (
    SELECT Count(*) AS Count
    FROM b
    WHERE a.id = b.id ) AS b;

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


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

4

1 回答 1

5

如果我理解你的正确,你会问这两种说法中哪一种更有效。

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

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

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

于 2018-04-03T10:54:51.510 回答