Apache Flink 漫谈系列(10) - JOIN LATERAL
我们说明上面的需求,本质上是按照左表Customers的customerid,去查询右表的Orders信息,就像一个For轮回一样,外层是遍历左表Customers全部数据,内层是按照左表Customers的每一个Customerid去右表Orders中举办遍历查询,然后再将切合前提的阁下表数据举办JOIN,这种按照左表逐条数据动态天生右表举办JOIN的语义,SQL尺度内里提出了LATERAL要害字,也叫做 lateral drive table。 1. CROSS APPLY和LATERAL 上面的示例我们用的是SQL Server举办测试的,这里在多提一下在SQL Server内里是怎样支持 LATERAL 的呢?SQL Server是用本身的方言 CROSS APPLY 来支持的。那么为啥不消ANSI-SQL的LATERAL而用CROSS APPLY呢? 也许的缘故起因是其时SQL Server为了办理TVF题目而引入的,同时LATERAL是SQL2003引入的,而CROSS APPLY是SQL Server 2005就支持了,SQL Server 2005的开拓是在2000年就举办了,这个也许也有个时刻差,等LATERAL出来的时辰,,CROSS APPLY在SQL Server内里已经开拓完成了。以是各种缘故起因SQL Server内里就回收了CROSS APPLY,但CROSS APPLY的语义与LATERAL却完全同等,同时后续支持LATERAL的Oracle12和PostgreSQL94同时支持了LATERAL和CROSS APPLY。 2. 题目办理 那么我们回到上面的题目,我们用SQL Server的CROSS APPLY来办理上面题目,SQL如下: 上面获得的功效完全满意查询需求。 四、JOIN LATERAL 与 INNER JOIN 相关 上面的查询需求并没有浮现JOIN LATERAL和INNER JOIN的区别,我们照旧以SQL Server中两个查询执行Plan来调查一下: 上面我们发明颠末SQL Server优化器优化之后的两个执行plan完全同等,那么为啥还要再造一个LATERAL 出来呢? 1. 机能方面 我们将上面的查询需求轻微改变一下,我们查询全部Customer和Customers的第一份订单信息。
查询功效: 我们发明固然C001的Customer有三笔订单,可是我们查询的TOP1信息。
查询功效: 如上我们都完成了查询需求,我们在来看一下执行Plan,如下: 我们直观发明完成沟通成果,行使CROSS APPLY举办查询,执行Plan简朴很多。 2. 成果方面 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |