我知道散列左外连接的算法是在右表上构建一个哈希表,然后遍历左表并在哈希表中搜索是否存在匹配,但完全外连接如何工作?扫描左表中的值后,您仍然需要一种方法来获取右表中没有左边匹配的元组。
答案 0 :(得分:1)
在遍历探测记录时,您可以记录哪些右元组在构建表中找到了匹配项。您只需为匹配的每个设置一个布尔值为true。作为算法的最后一步,您扫描构建表并输出之前不匹配的所有元组。
据我所知,有一种替代策略在RDBMS中没有使用:构建左右元组的组合哈希表。将该表视为从散列键到左元组列表以及右元组列表的映射。通过循环遍历两个输入表来构建该表,将所有元组添加到哈希表中。在所有元组被消耗之后,迭代哈希表一次并相应地输出相等组(所有左元组或所有右元组或相等组中所有左元组和所有右元组的交叉乘积)。
后一种算法适用于内存工作负载(如客户端应用程序)。前者适用于极端(或不可预测)的大探针输入,因此RDBMS使用那个。