哈希和索引有什么区别?

30

我已经学习了DBMS中的哈希(可扩展、线性)和索引(稀疏、稠密、基于次要键等),但是我无法理解哈希和索引之间的区别。这两种技术是一起使用还是只用其中之一?我感到困惑,因为这两种技术的目的似乎都是为了使我们能够快速检索数据,所以我认为只要其中之一就足够了。

有人能澄清一下它们之间的区别吗?


4
哈希是索引方法之一(或一种访问方法);而树(B-树等)则是另一种方法。 - Dan D.
5个回答

27

什么是索引?

索引是一种在多个字段上对一定数量的记录进行排序的方法。在表中某个字段上创建索引会生成一个新的数据结构,其中包含了该字段的值以及指向其所关联的记录的指针。该索引结构随后被排序,从而可以在其上执行二分查找。

什么是哈希?

哈希是将一串字符转换为通常较短的固定长度值或关键字的过程,这个值或关键字代表原始字符串。哈希用于索引和检索数据库中的项,因为使用较短的哈希关键字查找项比使用原始值更快。

我想这可能会消除您的疑虑。


1
如果有新记录被添加,排序索引结构将会变得昂贵。您可以提到,相反地,可以使用B+树来组织数据,以实现对索引键的快速访问。 - adijo

16

哈希是一种索引:它可以用来根据关键字定位记录,但不保留任何记录的顺序。基于哈希,无法迭代到后继或前驱元素。然而,在数据库的上下文中,索引会执行此操作。


3
  • 哈希并不能保证不同的值会被哈希到不同的地址。
  • 哈希中存在冲突。
  • 哈希会导致溢出。
  • 不需要访问索引结构来定位数据,然后从数据库文件中读取数据。
  • 有命令可以定义索引,但没有用于哈希的命令。

9
我认为散列和索引的最大区别,你的回答以及其他很多回答都忽略了,就在于大多数索引方案适合进行排序或查找“相近”的匹配项,而散列通常只能用于查找“精确”的匹配项。 - supercat

0

哈希是一种高级搜索技术,即将大数据转换为小数据项并存储在表中。但索引和二分搜索属于线性搜索。

此外,索引用于将多个字段的组合制作成索引(键)


0

索引和哈希的区别

定义上的区别
索引是一种数据结构技术,根据某些属性在数据库文件中高效地检索记录。另一方面,哈希是一种有效的技术,可以计算出数据记录在磁盘上的直接位置,而不使用索引结构。因此,这是索引和哈希之间的主要区别。

功能上的区别
索引使用数据引用,保存具有与键对应的值的磁盘块的地址,而哈希使用称为哈希函数的数学函数来计算数据记录在磁盘上的直接位置。因此,这也是索引和哈希之间的一个重要区别。

索引和哈希之间的另一个区别是,哈希对于大型数据库的处理比索引更加有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接