index和hasmap

o0lyfsai  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(432)

为了问我的问题,我首先需要解释我对这两个概念的理解。
实际上,我的理解很模糊,所以如果我错了就阻止我。
索引(sql中的btree):
索引有助于关系数据库加速查询。
例如,让我们获取一个customer表,并在age列中对其进行索引。
它将建立一个二叉树,其中每个节点都有这样的结构 [age, addresses of corresponding records] .
让我们考虑一下这个过滤器 WHERE AGE=18 ,则如果数据库 N 记录和 M 对于索引列的不同值,可以在中实现此查询 O(log(M)) (二进制搜索)而不是 O(N) 哈希Map:
然后,我遇到了hashmap,查找在哪里 O(1) ? 哼!!有趣!!
如果 key, value 是其中一个条目,它将对 key 这样它就变成了一个散列,并将其作为密钥保存。还持有 value 作为价值。
当您查找 key ,它对其进行编码,从而找到散列。然后它知道在哪里可以找到散列,因为散列实际上是某种地址本身( base + index * stride ). 因此,得到那个的实际地址 value 去拿那个 value 它自己。
问题:
为什么sql数据库不使用hashmap作为唯一键并获得更好的性能?

wd2eg0qa

wd2eg0qa1#

哈希Map只能用于相等查询。因此,它们通常不是有用的。上的b树索引 (x) 可用于以下查询:

select max(x) from t
select count(*) from t where x between 1 and 10

多列哈希Map通常不能单独访问每个键。因此,上面的查询可以在 (x, y) 以及 (x) .
此外,对数非常小。对于我们在数据库中处理的小数字,很难区分o(logn)和o(1)之间的区别。
而且,hashmaps在缩放时并不完全是o(1)。最终,它们开始发生冲突,并且会比内存大——这两者都会对性能产生重大影响。

相关问题