聚簇索引和非聚簇索引中使用的数据结构

Data Structures used in Clustered and Non-Clustered Index

我阅读了有关聚集索引和非聚集索引的文章并得出结论,我们对聚集索引使用哈希,对非聚集索引使用 B+ 树(或 B 树)。我的结论对吗?如果不是,那么这两者在数据结构层面有什么区别?

简单来说,我们可以解释如下。

聚簇索引和非聚簇索引都遵循b树结构,

for clustered index leaf node of the b-tree structure contains the Actual data.
for non clustered index leaf node of the b-tree structure points the address of the actual data.

当问题似乎集中在MySQL时写了这个答案。

既然你已经标记了问题 [mysql],我们应该将讨论限制在 that RDBMS 的可能性上。

您现在最应该使用的 "Engine" 是 InnoDB。它主要有 B+Tree 索引。 (它也有 FULLTEXTSPATIAL,但我不会讨论它们。)它 有 "Hash".

PRIMARY KEY是一个聚簇B+树。所有数据都由 PK 排序并存储到那个 B+Tree 中。 PK只能聚簇,只能是BTree。 PK 也是唯一的(在 MySQL)。

二级键也是B+树。它们包含二级索引的列。叶节点是主键的列。通过二级索引的 "point query" 需要向下钻取二级 BTree,然后向下钻取主键。辅助键不能是 "clustered".

对于一般用途,BTree 是最好的。哈希很少会更好。散列对于范围扫描毫无用处,而 BTree,尤其是 B+Tree,非常适合范围扫描。

当索引大于 RAM 中的缓存时,散列很糟糕。通常,您要访问的 'next' 键与您触摸的最后一个键不相邻,因此很有可能需要 I/O.