我读到了Clustered和Non-Clustered Index,并得出结论,我们使用Hashing for Clustered Index和B + tree(或B tree)作为Non-Clustered Index。我的结论是对的吗?如果没有,那么这两者在数据结构层面有什么区别?
答案 0 :(得分:1)
这个答案是在问题似乎集中在MySQL上时编写的。
由于您已经标记了问题[mysql],我们应该将讨论限制为 RDBMS。
一个"引擎"你最应该使用的是InnoDB。它主要有B + Tree索引。 (它还有FULLTEXT
和SPATIAL
,但我不会进入它们。)它不有" Hash"。
PRIMARY KEY
是群集B +树。所有数据都由PK排序并存储到那个B +树中。 PK只能聚集,只能是BTree。 PK也是唯一的(在MySQL中)。
辅助键也是B +树。它们包含二级索引的列。在叶节点处是主键的列。 A"点查询"通过二级索引需要向下钻取辅助BTree,然后向下钻取主键。辅助密钥不能"聚集"。
对于一般用途,BTree是最好的。哈希很少更好。哈希对于范围扫描是无用的,其中作为BTree,特别是B +树,非常适合这种情况。
当索引大于可以缓存在RAM中时,哈希很糟糕。通常情况下,' next'您要访问的密钥与您触摸的最后一个密钥不相邻,因此很有可能需要I / O.
答案 1 :(得分:0)
简单来说,我们可以解释如下。
Clustered和non-clustered索引都遵循b-tree结构,
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.