【发布时间】:2015-05-28 10:04:49
【问题描述】:
我在网上搜索了一下,发现连接两张表的Hash Join算法的复杂度据说是O(N+M),其中N和M是两张表的元组个数。
我想知道为什么它是 O(N+M),而不是最坏情况下的 O(N*M)?
据我所知,Hash Join 是 equi join 的一种实现:给定两个表 R 和 S,它是从它们的叉积 R*S 中选择元组 t,其中 t[R.A] = t[S.A], A是R和S的共同属性。
注意事项: 1) 我想知道复杂度是否为 O(N+M),尤其是当加入属性中的数据值不唯一时(即我们没有加入关键属性)。 2) 请注意,加入属性 A 可能是也可能不是键。
【问题讨论】:
-
你有链接到这句话的地方吗?
-
Big Os 在数据库中没有那么有用和误导,主要开销是网络/磁盘延迟
-
@SleimanJneidi 如果我们假设整个哈希连接发生在内存中,那么 OP 会更有意义吗?
-
@TimBiegeleisen 是的。特别是因为哈希表可以通过排除元组而不实际读取然后一遍又一遍地比较它们的所有值来避免大量磁盘访问。
标签: database join time-complexity