文本试图解释一些事情,但不幸的是,它造成的混乱比它解决的要多。
在逻辑级别,数据库表(正确术语:“关系”)由行(正确术语:“元组”)组成,这些行表示数据库旨在表示/反映的现实世界的事实。永远不要将这些行/元组称为“记录”,因为“记录”是与物理级别相关的概念,与逻辑不同。
通常,但这不是一成不变的普遍法则,您会发现物理组织由一个“主”数据存储组成,该数据存储具有每个元组的记录,并且该记录包含每个属性(列)值元组(行)。 (除非有 LOB 在运行左右。)这些记录必须在存储它们的存储中指定一个物理位置,这通常/通常使用主键值上的 B-tree 来完成。这有助于:
- 仅从关系/表中检索特定的 [元组/行与] 主键值。
- 按主键值的顺序遍历 [tuples of] 关系
- 仅从关系/表中检索 [元组/行内] 特定范围内的主键值。
主键值上的这种 B 树通常称为“集群”索引。
通常,还经常需要仅检索非主键的属性的特定值的[元组/行]。如果需要尽可能高效/快速地处理主键的值,我们会使用类似的索引,这些索引有时称为“辅助”。这些索引通常不包含索引的元组/行的所有属性/列值,而仅包含要索引的属性值加上主键值的提及(因此我们可以在“主”中找到其余属性数据存储。
那些“二级”索引大多也是 B 树索引,允许按顺序遍历被索引的属性,但它们也可能是散列索引,仅允许使用相等比较查找元组/行使用给定的键值(“键”=索引键,与关系/表上的键无关,但显然对于表/关系上的大多数键,索引键具有相同的位置也会有一个专用索引属性作为它支持的表键)。
最后,“主”(/“集群”)索引不能是哈希索引(文本有点相反,但这是完全错误的),没有理论上的理由。但考虑到你教科书的解释水平很差,你可能不会被教导。
还要注意,除了使用 B 树或哈希索引之外,还有其他物理组织数据库的方法。
总结一下:
“Clustered”通常指主数据记录存储上的索引
并且通常是主键上的 B-tree [或类似的]
而教科书大概不想让你知道更高级的可能性
“次要”通常是指提供额外“对特定元组/行的快速访问”的附加索引
并且通常也是允许按顺序遍历的 B 树,就像“聚集”/“主”索引一样
但也可以是只允许“按给定值访问”但不允许按顺序遍历的哈希索引。
希望对你有帮助。