在群集和非群集索引中使用的数据结构

时间:2016-08-26 10:18:51

标签: sql database indexing relational-database database-indexes

我读到了Clustered和Non-Clustered Index,并得出结论,我们使用Hashing for Clustered Index和B + tree(或B tree)作为Non-Clustered Index。我的结论是对的吗?如果没有,那么这两者在数据结构层面有什么区别?

2 个答案:

答案 0 :(得分:1)

这个答案是在问题似乎集中在MySQL上时编写的。

由于您已经标记了问题[mysql],我们应该将讨论限制为 RDBMS。

一个"引擎"你最应该使用的是InnoDB。它主要有B + Tree索引。 (它还有FULLTEXTSPATIAL,但我不会进入它们。)它有" 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.