三种 Join 的左右表惯例称呼

称呼

对于 Nested Loop Join,左表称为 outer table,又称 driving table,右表称为 inner table
对于 Hash Join,左表称为 build table,右表称为 probe table
对于 Merge Join,左表称为 first table,右表称为 second table

注解

对于 Nested Loop Join,outer table 和 inner table 概念是怎么来的呢?我有时会弄混,直到学会了下面的理解方法。不妨考虑两层 for 循环:

foreach (i in M)
   foreach (j in N)
        if (i == j) print "match";

上面代码的意思是对于集合 M 中的每一个 i,在集合 N 中寻找和 i 相等的值。M 就是 outer table, N 就是 inner table。这种情况下, inner、outer 的概念就非常清晰自然了。

对于 Hash Join,理解了 hash join 的实现方法,就自然理解 build、probe 的概念了。简而言之,就是用左表 build 一个 hashtable,用右表的每一行去 probe 看是否命中,命中则表示 row match。

Merge Join 就没什么好说的了。左右表之间没什么优先级,那就取名 first second 好了,如果下面的表更多,来个 third 也是可以的,那就是 Multi-Way Merge Join 了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值