B+树和MySQL

本文对比了MySQL数据库中MyISAM与InnoDB两种存储引擎的索引实现方式,介绍了B+树在两种引擎中的不同应用,包括非聚集索引与聚集索引的概念及其对性能的影响。

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

在mysql数据库中,MyISAM引擎和InnoDB引擎的主键和索引都使用了B+树,但是二者对B+树的使用略有区别,分别介绍如下。

注:B+树的叶子节点包含关键字和数据部分,还有指向下一个兄弟叶子节点的指针。非叶子节点只包含关键字和指针,不包含数据部分。

B+树和MyISAM

在MyISAM引擎中,B+树的叶子节点的数据部分保存的是数据库记录的地址,主键索引和辅助索引都是如此,这种索引方式叫做“非聚集索引”,就像下图这样:


在这种结构下,索引文件和数据文件是分离的,索引文件只记录了数据的地址

B+树和InnoDB

在InnoDB引擎中,主键索引和辅助索引是不同的。

InnoDB引擎的主键索引在叶子节点中的数据部分,存储的是数据库记录本身,这种索引方式叫做“聚集索引”,如下图:


可以看到,InnoDB引擎的主键索引是和数据存放在一起的。

聚集索引的结构要求数据库表必须有主键,如果没有主键的话MySQL会给表生成一个隐藏的字段当主键。

对于InnoDB引擎的表来说,最好有一个自增主键,这对插入操作有非常大的性能提升,可以减少数据的移动,减少维护索引的工作量。


InnoDB引擎的辅助索引,叶子节点中的数据部分保存的是主键索引的关键字,也就是说,在查询时,用辅助索引查到了数据之后,还要到主键索引中再查一次,才能得到真正的数据,如果对于name字段建立一个索引,那么索引结构如下图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值