B树和hash的区别与联系

原创 2017年01月03日 15:35:39

关系型数据库中,索引大多采用B/B+树来作为存储结构,而全文搜索引擎的索引则主要采用hash的存储结构,这两种数据结构有什么区别?


hash结构的特点:检索效率非常高,索引的检索可以一次到位,O(1)。B树需要从根节点到枝节点,最后才能到叶节点进行多次I/O操作,所以hash的效率远远高于B树的效率。


那么为什么数据库索引还是用B树结构呢?

1、hash索引仅满足“=”、“IN”和“<=>”查询,不能使用范围查询

因为hash索引比较的是经常hash运算之后的hash值,因此只能进行等值的过滤,不能基于范围的查找,因为经过hash算法处理后的hash值的大小关系,并不能保证与处理前的hash大小关系对应。

2、hash索引无法被用来进行数据的排序操作

由于hash索引中存放的都是经过hash计算之后的值,而hash值的大小关系不一定与hash计算之前的值一样,所以数据库无法利用hash索引中的值进行排序操作。

3、对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。

4、Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。

(因此:键值重复率低的适合用B树索引)


hash相当于把key通过hash函数计算,得到key的hash值,再用这个hash值做指针,查找hash表中是否存在key,如果存在就返回 key所对应的value,选定一个好的hash函数很重要,好的hash函数可以使计算出的hash值分布均匀,降低冲突,只有冲突减小了,才会降低 hash表的查找时间。


b-tree完全基于key的比较,和二叉树相同的道理,相当于建个排序后的数据集,使用二分法查找算法,实际上也非常快,而且受数据量增长影响非常小。

版权声明:本文为博主原创文章,未经博主允许不得转载。

hash索引跟B树索引的区别

Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T...
  • injurooioo
  • injurooioo
  • 2017年06月20日 18:39
  • 928

B-树和Hash索引区别

Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T...
  • maybe3is3u5
  • maybe3is3u5
  • 2016年09月03日 23:15
  • 1799

b树和hash的应用场景

关系型数据库中,索引大多采用B/B+树来作为存储结构,而全文搜索引擎的索引则主要采用hash的存储结构,这两种数据结构有什么区别? 如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过...
  • chuangsun
  • chuangsun
  • 2017年09月17日 21:18
  • 425

MySQL B+树索引和哈希索引的区别

导读 在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区别及其不同的应用建议。 二者区别 备注:先说下,在MySQL文档里,实际上是把B...
  • gao1440156051
  • gao1440156051
  • 2016年08月02日 18:25
  • 1567

B树、B+树的区别

一、B树 1、B树的定义 B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件: (1)每个结点至多有m个子结点; (2)除根结点和叶结点外,其它每个结...
  • yangshuangtao
  • yangshuangtao
  • 2015年09月27日 14:51
  • 3573

AVL树与红黑树(R-B树)的区别与联系

AVL树(http://baike.baidu.com/view/593144.htm?fr=aladdin),又称(严格)高度平衡的二叉搜索树。其他的平衡树还有:红黑树、Treap、伸展树、SBT。...
  • fuqiaoyimeng
  • fuqiaoyimeng
  • 2014年08月01日 15:00
  • 2961

B树索引、位图索引和散列索引

索引在数据结构上可以分为三种B树索引、位图索引和散列索引   B树索引   结构:           特点:   1.索引不存储null值。      更...
  • zhangyi880405
  • zhangyi880405
  • 2014年10月03日 16:57
  • 873

B树和二叉排序树(如红黑树)、B树和B+树的区别

B树是为了提高磁盘或外部存储设备查找效率而产生的一种多路平衡查找树。 B+树为B树的变形结构,用于大多数数据库或文件系统的存储而设计。 B树相对于红黑树的区别 在大规模数据存储的时候,红...
  • susidian
  • susidian
  • 2016年02月26日 13:22
  • 5063

B树索引和位图索引的区别!

B树索引 主键和唯一性约束字段的B树索引,效率几乎和海量数据没有关系。 键值重复率低的字段比较适合使用B树索引。 位图索引 键值重复率高的字段比较适合使用位图索引。 count、an...
  • zq9017197
  • zq9017197
  • 2011年11月24日 17:07
  • 4521

hash相对B树优缺点

哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。实际上,...
  • seagullyoyo
  • seagullyoyo
  • 2014年08月22日 13:33
  • 1726
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:B树和hash的区别与联系
举报原因:
原因补充:

(最多只允许输入30个字)