我们使用术语哈希索引来表示哈希文件结构以及 二级哈希索引。严格来说,哈希索引仅为 二级指数结构。 永远不需要哈希索引作为群集索引结构,因为如果文件本身是通过散列来组织的,则不需要 单独的哈希索引结构。但是,因为哈希文件 组织提供对索引记录的相同直接访问 提供,我们假装由哈希组织的文件也有一个 聚集哈希索引。
是"二级索引"与"非聚集指数相同的概念" (这是我从书中理解的)?
哈希索引是否永远不是聚簇索引?
你能否重新解释或解释原因"哈希索引永远不需要作为聚类索引结构"是"如果文件本身是通过散列来组织的,则不需要单独的哈希索引结构"?那么"如果文件本身不通过哈希"?
感谢。
答案 0 :(得分:5)
该文本试图解释某些内容,但不幸的是,它会产生更多的混乱而不是解决问题。
在逻辑层面,数据库表(正确的术语:"关系")由行组成(正确的术语:"元组"),它们表示有关现实世界的事实旨在表达/反思。别打电话给那些行/元组"记录"因为"记录"是一个与物理层面有关的概念,它与逻辑层不同。
通常,但这不是一个普遍的法律,你会发现,物理组织包括一个主要的"主要"数据存储区,其中包含每个元组的记录以及该记录包含元组(行)的每个属性(列)值的位置。 (除非LOB正在播放中,否则这样做。)这些记录必须在存储它们的商店中给出物理位置,这通常/通常使用主键值上的B树来完成。这有利于:
主键值上的这个B树通常称为" clustering"索引。
通常,还经常需要仅检索具有不是主键的特定属性值的[元组/行]。如果需要尽可能高效/快速地完成主键的值,我们使用类似的索引,有时称为" secondary"。这些索引通常不包含索引的元组/行的所有属性/列值,但只包含要索引的属性值加上主键值的提及(因此我们可以在&#34中找到其余属性) ;主要"数据存储。
那些"中学"索引通常也是B树索引,它允许对被索引的属性进行按顺序遍历,但它们也可能是散列索引,只允许使用与给定键值的相等比较来查找元组/行(& #34; key" =索引键,与关系/表上的键无关,但很明显,对于表/关系上的大多数键,也会有一个专用索引,其中索引键具有与它支持的表键。)
最后,没有理论上的原因,为什么"主要" (/" clustered")索引不能是哈希索引(文本有点暗示相反,但这是完全错误的)。但鉴于你的教科书中的解释水平很低,你可能不会被教导。
另请注意,除了使用B树或哈希索引之外,还有其他物理组织数据库的方法。
总结一下:
"群集"通常是指主数据记录存储上的索引 并且通常是主键上的B树[或某些此类] 并且教科书可能不希望您了解更高级的可能性
"二次"通常指的是额外的索引,可以提供对特定元组/行的额外快速访问。 并且通常也是一个允许按顺序遍历的B树,就像" clustered" /" primary"指数 但也可以是一个哈希索引,只允许通过给定的值"访问#34;但没有按顺序遍历。
希望它有所帮助。