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

本文深入解析SQL中的三种主要连接类型:NestedLoopJoin、HashJoin和MergeJoin。详细介绍了每种连接方式中外表和内表的概念,以及它们在具体实现过程中的角色。通过直观的代码示例,帮助读者理解这些概念,为数据库优化和查询性能提升打下坚实基础。

281

被折叠的 条评论
为什么被折叠?



