SQL连接的基本划分

多表连接从连接解释来说一般可以分为:NEXT LOOP、SORT MERGE、HASH JOIN。

NEST LOOP:

驱动表Driving Table,被驱动表Driven Table。驱动表做一次遍历,被驱动表做多次遍历。不需要排序。可以使用非等值连接。

SORT MERGE:

每个表都要先排序,然后进行合并。排序首先在内存中进行,能在内存中完成的叫做Optimal Sort(In-Memory Sort)。如果需要借助磁盘缓冲,叫做外部排序External Sort。

HASH JOIN:

一个驱动表,一个被驱动表。准备阶段:对驱动表的连接字段进行哈希操作,产生一系列的Hash Bucket(哈希桶);探测阶段:依次上去被驱动表每条记录,对连接字段执行相同哈希函数,和驱动表哈希桶进行匹配,这个过程叫探测(Probe)。

 

 

从语句连接方式来说一般可以分为:传统连接(Inner Join、Left/Right Outer Join、Full Join、Cross Join),半连接(包括Left/Right Semi Join、Left/Right Anti Semi Join;In、Exists是Semi-Join,Not Exists、Not In是Anti-Join),非等值连接(Theta Join)。例子:

--left-semi-join

select L1 fromL where (L.1 ,L.2) in (select R.3,R.5 from R )

select L1 fromL where exists select 1 from R where L.1=R.3 and L.2=R.5)

--left-anti-semi-join

where(left.col1, left.col2) not in (R#3,R#5)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值