哈希和索引有啥区别?

Posted

技术标签:

【中文标题】哈希和索引有啥区别?【英文标题】:What is the difference between hashing and indexing?哈希和索引有什么区别? 【发布时间】:2012-11-08 08:55:17 【问题描述】:

我研究过 DBMS 中的哈希(可扩展、线性)和 DBMS 中的索引(稀疏、密集、基于辅助键的索引等),但我无法理解哈希和索引之间的区别。这两种技术是一起使用还是只是使用?我很困惑,因为这两种技术的目的似乎都是为了让我们能够快速检索数据,所以我认为任何一种都应该足够了。

谁能澄清一下区别?

【问题讨论】:

散列是一种索引方法(或一种访问方法);树(B 树等)是另一种。 【参考方案1】:

什么是索引?

索引是一种对多个字段中的多个记录进行排序的方法。在表中的字段上创建索引会创建另一个数据结构,该结构包含字段值和指向与其相关的记录的指针。然后对该索引结构进行排序,允许对其执行二分搜索。

什么是散列?

散列是将字符串转换为通常较短的固定长度值或表示原始字符串的键。散列用于索引和检索数据库中的项目,因为使用较短的散列键查找项目比使用原始值查找项目更快。

我认为这可能会消除您的疑问。

【讨论】:

如果您要添加新记录,那么对索引结构进行排序将变得很昂贵。您还可以提及,可以使用 B+ 树来组织数据,以便快速访问索引键。【参考方案2】:

哈希是一种索引:它可用于根据键定位记录——但它不保留任何记录顺序。基于哈希,不能迭代到后续或前面的元素。然而,这就是索引的作用(在数据库的上下文中)。

【讨论】:

【参考方案3】: 散列不保证不同的值会散列到不同的地址。 Hashing 中存在冲突。 散列导致溢出。 无需访问索引结构来定位数据,然后从 DB 文件中读取数据。 有定义索引但不用于​​散列的命令。

【讨论】:

我认为散列和索引之间的最大区别是,您的回答和许多其他人都忽略了这一点,即 大多数 索引方案适用于排序或查找“接近”匹配项,而除了查找“精确”匹配之外,散列通常无用。【参考方案4】:

索引和散列的区别

按定义索引是一种数据结构技术,可根据发生索引的某些属性有效地从数据库文件中检索记录。另一方面,散列是一种无需使用索引结构即可计算数据记录在磁盘上的直接位置的有效技术。因此,这是索引和散列之间的主要区别。

按功能 索引使用数据引用来保存磁盘块的地址以及与键对应的值,而散列使用称为散列函数的数学函数来计算磁盘上数据记录的直接位置。因此,这也是索引和散列之间的主要区别。

索引散列之间的另一个区别是散列比索引更适合大型数据库。

【讨论】:

【参考方案5】:

散列是一种高级搜索技术,即将大数据制成小数据项并存储在表中。但是索引和二分查找属于线性查找。

还有索引用于为多个字段的组合创建索引(键)

【讨论】:

以上是关于哈希和索引有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

== 运算符和 equals() 有啥区别? (使用哈希码()???)

Ruby 哈希中的 : 和 "" 有啥区别?

分布式哈希表技术和比特币区块链有啥区别?

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

python字符串格式%x和%#x有啥区别(哈希标签十六进制?)

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