为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PIPIONE 2019-06-06 14:31:20
PostgreSQL中的横向查询和子查询有什么区别?因为Postgres有能力LATERAL加入,我一直在阅读它,因为我目前为我的团队做了复杂的数据转储,有很多效率低下的子查询,使得整个查询需要四分钟或更长时间。我明白LATERALJOIN也许可以帮助我,但即使在阅读了以下文章之后这一个从堆分析,我仍然不太明白。的用例是什么?LATERAL加入?.‘>之间的区别是什么?LATERAL加入和子查询?
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

非-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查询,因为它与查询本身之外的行有关联。


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 1255 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信