【MySQL面试题】为什么使用B+树作为索引?

本文深入探讨了MySQL数据库中索引的实现方式,包括InnoDB和MyISAM索引的区别,以及B+树作为InnoDB底层数据结构的优势。解析了B+树为何能有效减少查询时的I/O次数,支持范围查询,并介绍了如何通过索引覆盖来优化查询性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问:你的系统使用了什么数据库?

答:是使用的MySQL数据库。

问:你了解过MySQL索引吗?有哪些呢?

答:MySQL常用的有innodb和myisam索引。

问:那innodb底层采用的是什么结构呢?

答:它底层采用的是b+树的结构,内部也支持hash的结构。

好了,面试官引导的差不多了,接下去就要好好回答了。
问:那为什么不是b树或者其他的树结构呢?

答:b+树是一个多叉的平衡树,平衡树就是每个节点的叶子节点高度差不超过1,并且在它的非叶子节点存储的是索引,数据全都存储在叶子节点中,用一个链表串联起来,遍历时只需遍历该链表。

问:那为什么是多叉并且是平衡呢?

答:多叉且平衡可以使树的高度降低,降低查询时IO的次数。并且索引存在着一定的顺序,支持范围的比较查询。

问:那么一般数据库表会有多个索引,查询随便一个非主键索引时是如何查询的呢?

答:在数据库中,存在主键(聚集)索引和普通索引。如果没有指定默认会生成一个聚集索引,在查询非聚集索引时,该索引数据结构的底层存储的是主键的值,因此会根据查询到的主键再做一次回表查询 在使用explain关键字时会出现 using index condition。

问:那么如何避免回表查询呢?

答:我们可以利用索引覆盖的原理,在出了主键索引外,对要查询的其他字段添加普通索引即可。

避免回表优化参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值