您的位置:首页 > 数据库

【连载】关系型数据库是如何工作的?(15) - 查询管理器之Hash Join

2016-05-14 15:24 337 查看
Hash连接在很多情况下都比嵌套循环连接有低的成本。



其主要思路是:

1) 拿到内关系中的所有元素;

2) 利用一个Hash函数构建一个内存Hash表;

3) 从外关系中一个一个的取出元素;

4) 利用Hash函数计算每个元素的Hash值,找到Hash表中关联的桶;

5) 如果桶中有元素和当前外层关系元素相等,则匹配成功。

为了简化计算时间复杂度,需要做一些假定:

内关系被划分为X个桶;

利用Hash函数划分内关系和外关系时,桶的数量相等;

匹配一个外关系元素和桶内所有内关系元素的花费是桶内元素的数量。

基于以上假设,时间复杂度是 (M/X) * N + cost_to_create_hash_table(M) + cost_of_hash_function*N,如果Hash函数创建了足够小尺寸的桶,那么时间复杂度是O(M+N)。

这种算法也有一个变种:

1) 计算内关系和外关系的Hash表;

2) 将两个Hash表放入磁盘;

3) 然后依次比较Hash值相同的两个桶(两个桶都先加载到内存)。

译者注:这种算法也可以应用在内存有限时比较两组海量字符串时。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息