Yar*_*lyk 3 sql postgresql join 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;
Run Code Online (Sandbox Code Playgroud)
侧
SELECT *
FROM a,
LATERAL (
SELECT Count(*) AS Count
FROM b
WHERE a.id = b.id ) AS b;
Run Code Online (Sandbox Code Playgroud)
我知道这里的 join 将被计算一次,然后与主请求与每个 FROM 的请求合并。
在我看来,如果 join 将几行旋转到一帧,那么效率会更高,但如果是 1 比 1,则为 LATERAL - 我认为对吗?
如果我理解正确,您会问这两个语句中哪一个更有效。
您可以使用 自己测试,EXPLAIN (ANALYZE)我想答案取决于数据:
如果 中的行很少a,并且LATERAL在 上有索引,则连接可能会更有效b(id)。
如果 中有很多行a,第一个查询可能会更有效,因为它可以使用散列或合并连接。