Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 散列和索引有什么区别?_Database_Hash_Indexing - Fatal编程技术网

Database 散列和索引有什么区别?

Database 散列和索引有什么区别?,database,hash,indexing,Database,Hash,Indexing,我研究过DBMS中的哈希(可扩展、线性)和DBMS中的索引(稀疏、密集、基于次键的索引等),但我无法理解哈希和索引之间的区别。这两种技术是一起使用的,还是只使用其中一种?我感到困惑,因为这两种技术的目的似乎都是为了让我们能够快速检索数据,所以我认为这两种技术都应该足够了 有人能解释一下区别吗?什么是索引 索引是对多个字段上的多个记录进行排序的一种方法。在表中的字段上创建索引将创建另一个数据结构,该结构保存字段值以及指向该字段相关记录的指针。然后对该索引结构进行排序,允许对其执行二进制搜索 什么是

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

有人能解释一下区别吗?

什么是索引

索引是对多个字段上的多个记录进行排序的一种方法。在表中的字段上创建索引将创建另一个数据结构,该结构保存字段值以及指向该字段相关记录的指针。然后对该索引结构进行排序,允许对其执行二进制搜索

什么是散列

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


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

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

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

哈希是一种先进的搜索技术,即将大数据制成小数据项并存储在表中。但是,索引和二进制搜索是以线性方式进行搜索的

而且,索引用于为多个字段的组合建立索引(键)

索引和散列之间的差异 根据定义
索引是一种数据结构技术,可根据索引所依据的某些属性从数据库文件中高效检索记录。另一方面,散列是一种有效的技术,可以在不使用索引结构的情况下计算数据记录在磁盘上的直接位置。因此,这是索引和散列的主要区别

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


索引和散列的另一个区别是,散列比索引更适用于大型数据库。

散列是一种索引方法(或一种访问方法);树(B-树等)是另一种。我认为哈希和索引之间的最大区别(您的答案和其他许多人都忽略了这一点)是,大多数索引方案都适合于排序或查找“接近”的匹配,而哈希通常除了查找“精确”的匹配之外对其他任何事情都没有用处。如果您添加了新记录,对索引结构进行排序将变得非常昂贵。您还可以提到,可以使用B+树来组织数据,以便快速访问索引键。