PostgreSQL中的横向查询和子查询有什么区别?

PostgreSQL中的横向查询和子查询有什么区别?

因为Postgres有能力LATERAL加入,我一直在阅读它,因为我目前为我的团队做了复杂的数据转储,有很多效率低下的子查询,使得整个查询需要四分钟或更长时间。

我明白LATERALJOIN也许可以帮助我,但即使在阅读了以下文章之后这一个从堆分析,我仍然不太明白。

的用例是什么?LATERAL加入?.‘>之间的区别是什么?LATERAL加入和子查询?


PIPIONE
浏览 1256回答 3
3回答

拉风的咖菲猫

非-lateral和一个lateral连接取决于是否可以查看左手表的行。例如:select  *from    table1 t1cross join lateral        (         select  *         from    t2        where   t1.col1 = t2.col1 -- Only allowed because of lateral         ) sub这种“向外看”意味着必须对子查询进行多次计算。毕竟,t1.col1可以假定很多值。相反,非-lateral可以对联接进行一次评估:select  *from    table1 t1cross join         (         select  *         from    t2        where   t2.col1 = 42 -- No reference to outer query         ) sub如所需lateral,内部查询在任何方面都不依赖于外部查询。一个lateral查询是correlated查询,因为它与查询本身之外的行有关联。
打开App,查看更多内容
随时随地看视频慕课网APP