【问题标题】:Is a hash index never a clustering index?哈希索引永远不是聚集索引吗?
【发布时间】:2018-11-27 07:08:46
【问题描述】:

来自Database System Concepts

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

“二级索引”和“非聚集索引”是同一个概念吗(这是我从书中理解的)?

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

您能否重新表述或解释为什么“从不需要散列索引作为聚集索引结构”的原因是“如果文件本身是通过散列组织的,则不需要单独的散列索引结构”? “如果一个文件本身不是通过散列组织的”怎么办?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    文本试图解释一些事情,但不幸的是,它造成的混乱比它解决的要多。

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

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

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

    主键值上的这种 B 树通常称为“集群”索引。

    通常,还经常需要仅检索非主键的属性的特定值的[元组/行]。如果需要尽可能高效/快速地处理主键的值,我们会使用类似的索引,这些索引有时称为“辅助”。这些索引通常不包含索引的元组/行的所有属性/列值,而仅包含要索引的属性值加上主键值的提及(因此我们可以在“主”中找到其余属性数据存储。

    那些“二级”索引大多也是 B 树索引,允许按顺序遍历被索引的属性,但它们也可能是散列索引,仅允许使用相等比较查找元组/行使用给定的键值(“键”=索引键,与关系/表上的键无关,但显然对于表/关系上的大多数键,索引键具有相同的位置也会有一个专用索引属性作为它支持的表键)。

    最后,“主”(/“集群”)索引不能是哈希索引(文本有点相反,但这是完全错误的),没有理论上的理由。但考虑到你教科书的解释水平很差,你可能不会被教导。

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

    总结一下:

    “Clustered”通常指主数据记录存储上的索引 并且通常是主键上的 B-tree [或类似的] 而教科书大概不想让你知道更高级的可能性

    “次要”通常是指提供额外“对特定元组/行的快速访问”的附加索引 并且通常也是允许按顺序遍历的 B 树,就像“聚集”/“主”索引一样 但也可以是只允许“按给定值访问”但不允许按顺序遍历的哈希索引。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 2013-08-07
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 2021-09-07
      • 2013-05-19
      • 2021-01-14
      相关资源
      最近更新 更多