哈希索引永远不是聚簇索引吗?

时间:2018-06-18 12:22:45

标签: database data-structures hash rdbms database-indexes

来自Database System Concepts

  

我们使用术语哈希索引来表示哈希文件结构以及   二级哈希索引。严格来说,哈希索引仅为   二级指数结构。   永远不需要哈希索引作为群集索引结构,因为如果文件本身是通过散列来组织的,则不需要   单独的哈希索引结构。但是,因为哈希文件   组织提供对索引记录的相同直接访问   提供,我们假装由哈希组织的文件也有一个   聚集哈希索引。

是"二级索引"与"非聚集指数相同的概念" (这是我从书中理解的)?

哈希索引是否永远不是聚簇索引?

你能否重新解释或解释原因"哈希索引永远不需要作为聚类索引结构"是"如果文件本身是通过散列来组织的,则不需要单独的哈希索引结构"?那么"如果文件本身通过哈希"?

感谢。

1 个答案:

答案 0 :(得分:5)

该文本试图解释某些内容,但不幸的是,它会产生更多的混乱而不是解决问题。

在逻辑层面,数据库表(正确的术语:"关系")由行组成(正确的术语:"元组"),它们表示有关现实世界的事实旨在表达/反思。别打电话给那些行/元组"记录"因为"记录"是一个与物理层面有关的概念,它与逻辑层不同。

通常,但这不是一个普遍的法律,你会发现,物理组织包括一个主要的"主要"数据存储区,其中包含每个元组的记录以及该记录包含元组(行)的每个属性(列)值的位置。 (除非LOB正在播放中,否则这样做。)这些记录必须在存储它们的商店中给出物理位置,这通常/通常使用主键值上的B树来完成。这有利于:

  • 仅从关系/表中检索具有主键值的特定[元组/行。
  • 按主键值顺序遍历[元组]关系
  • 仅检索关系/表中主键值的特定范围内的[元组/行]。

主键值上的这个B树通常称为" clustering"索引。

通常,还经常需要仅检索具有不是主键的特定属性值的[元组/行]。如果需要尽可能高效/快速地完成主键的值,我们使用类似的索引,有时称为" secondary"。这些索引通常不包含索引的元组/行的所有属性/列值,但只包含要索引的属性值加上主键值的提及(因此我们可以在&#34中找到其余属性) ;主要"数据存储。

那些"中学"索引通常也是B树索引,它允许对被索引的属性进行按顺序遍历,但它们也可能是散列索引,只允许使用与给定键值的相等比较来查找元组/行(& #34; key" =索引键,与关系/表上的键无关,但很明显,对于表/关系上的大多数键,也会有一个专用索引,其中索引键具有与它支持的表键。)

最后,没有理论上的原因,为什么"主要" (/" clustered")索引不能是哈希索引(文本有点暗示相反,但这是完全错误的)。但鉴于你的教科书中的解释水平很低,你可能不会被教导。

另请注意,除了使用B树或哈希索引之外,还有其他物理组织数据库的方法。

总结一下:

"群集"通常是指主数据记录存储上的索引 并且通常是主键上的B树[或某些此类] 并且教科书可能不希望您了解更高级的可能性

"二次"通常指的是额外的索引,可以提供对特定元组/行的额外快速访问。 并且通常也是一个允许按顺序遍历的B树,就像" clustered" /" primary"指数 但也可以是一个哈希索引,只允许通过给定的值"访问#34;但没有按顺序遍历。

希望它有所帮助。