称呼
对于 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 了。