关于B/B+树和聚簇索引和非聚簇索引的问题

来源:5-6 索引的实现

bbmouse

2021-11-26

CC老师,想问下我的这个结论正不正确?

结论:
B树可以实现聚簇索引和非聚簇索引
B+树只能实现聚簇索引

原因推导:

B树:
B树的节点存储的是数据,这个数据可以是指针,也可以是真实的记录
当节点存储的数据都是真实的记录时,实现的就是聚簇索引;
当节点存储的数据都是指针时,实现的就是非聚簇索引;

B+树:
B+树的非叶子节点存储的数据是指针,叶子节点存储的数据是真实记录,而聚簇索引需要叶子节点都是真实记录,所以B+树只能实现聚簇索引

网上搜了一圈,都没找到答案,都是分别比较B/B+树,聚簇索引和非聚簇索引的区别。。
而且文章感觉都是互相抄袭,我分不清谁的是对的了,,

写回答

1回答

ccmouse

2021-11-29

B树和B+树都是数据结构,它们管理了键值对。每个节点都有键->值的对应关系,我们通过键来排列子节点的顺序。对于数据库记录来说,键就是主键,值的话,在聚簇索引的实现中,值就是记录本身。

B+树能不能实现非聚簇索引?能,只要这颗B+树的每个节点的值是记录的指针即可。

B树能否实现聚簇索引? 比较困难,因为这样的话,这个表的记录的存储位置在物理上就不连续。我们顺序访问的话,就要涉及从叶子结点向根节点寻找的过程,这样的做法本身也不够优化。如果是判断题或者选择题,我倾向于认为不能。

0
0

Google面试官亲授-Java面试新手尊享课

为面试新手量身定制的Java面试尊享课,解锁“鲤鱼跃龙门”的妙招

2853 学习 · 180 问题

查看课程