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

Tim*_*Tim -1 database hash rdbms database-indexes data-structures

来自数据库系统概念

我们使用术语哈希索引来表示哈希文件结构以及辅助哈希索引。严格来说,哈希索引只是二级索引结构永远不需要哈希索引作为聚簇索引结构,因为如果文件本身是通过哈希进行组织的,则不需要在其上使用单独的哈希索引结构。但是,由于哈希文件组织提供了与索引提供的记录相同的直接访问,因此我们假装通过哈希组织的文件也具有聚类哈希索引。

“二级索引”和“非聚集索引”(我从书中了解到)的概念是否相同?

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

您是否可以重新解释或解释为什么“永远不需要哈希索引作为聚簇索引结构”的原因是“如果文件本身是通过哈希组织的,则不需要在其上使用单独的哈希索引结构”?如果“文件本身不是通过散列来组织的”,该怎么办?

谢谢。

Erw*_*out 5

文本试图解释某些内容,但不幸的是,造成了比解决方案更多的混乱。

在逻辑级别上,数据库表(正确的术语:“关系”)由行(正确的术语:“元组”)组成,这些行表示有关db旨在表示/反映的现实世界的事实。永远不要将这些行/元组称为“记录”,因为“记录”是与物理级别有关的概念,与逻辑有所不同。

通常,但这不是一成不变的普遍定律,您会发现物理组织由一个“主要”数据存储区组成,该存储区具有每个元组的记录,并且该记录包含该元组的每个属性(列)值(行)。(除非正在运行LOB左右,否则这些记录必须在存储它们的存储区中指定一个物理位置,并且通常/通常使用主键值上的B树来完成。这有助于:

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

主键值上的此B树通常称为“聚类”索引。

通常,也经常需要仅检索不是主键的属性的特定值(具有元组/行)。如果需要尽可能有效/快速地完成主键的值,我们可以使用类似的索引,有时将其称为“第二”。这些索引通常不包含已索引元组/行的所有属性/列值,而仅包含要索引的属性值以及提及主键值(因此我们可以在“ main”中找到其余属性)数据存储。

这些“二级”索引通常也将是B树索引,这将允许对要索引的属性进行有序遍历,但它们也可能是哈希索引,这仅允许使用给定相等性比较来查找元组/行。键值(“键” =索引键,与关系/表上的键无关),尽管显然对于表/关系上的大多数键,也将有一个专用索引,其中索引键与它支持的表键)。

最后,没有任何理论上的理由说明“主”(/“集群”)索引不能为哈希索引(文本有点暗示相反,但这是完全错误的)。但是,由于教科书中的解释水平不高,因此可能不会期望您受到这样的教导。

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

综上所述:

“聚集”通常是指主数据记录存储上的索引,并且通常是主键上的B树(或类似的树),并且教科书可能不希望您了解更多高级可能性

“二级”通常是指提供其他“快速访问特定元组/行”的附加索引,并且通常也是一个B树,允许按顺序遍历,就像“聚集” /“主”索引一样,但也可以是哈希索引,仅允许“按给定值进行访问”,而不能按顺序遍历。

希望能帮助到你。