首页 游戏 软件 资讯 排行榜 专题
首页
科技数码
MyISAM与InnoDB索引差异详解:B+树的不同实现对比

MyISAM与InnoDB索引差异详解:B+树的不同实现对比

热心网友
61
转载
2025-12-03

InnoDB和MyISAM是如何利用B+树来实现这两类索引,它们之间又有什么差异呢?今天我们就来聊聊这个话题。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

数据库索引主要分为主键索引(Primary Index)与普通索引(Secondary Index)。那么,InnoDB和MyISAM在利用B+树实现这两类索引时,具体采用了哪些不同的设计思路?这正是本文要探讨的核心内容。

一、MyISAM的索引机制

MyISAM存储引擎的索引与数据记录是分开存储的,这种结构被称为非聚集索引(UnClustered Index)。

在主键索引与普通索引的实现上,MyISAM并没有本质的区别:

数据行被存放在一个独立的连续存储区域中;主键索引的叶子节点存储的是主键值以及对应数据记录的指针;普通索引的叶子节点则存储索引列的值和对应记录的指针。

值得一提的是,MyISAM表可以不被定义主键。

主键索引和普通索引实际上是两棵独立的B+树。当通过索引列进行查询时,系统首先定位到B+树的叶子节点,再通过指针找到对应的数据记录。

举例来说明MyISAM的运作方式:

t(id PK, name KEY, sex, flag);

假设表中存在四条记录:

1, shenjian, m, A
3, zhangsan, m, A
5, lisi, m, A
9, wangwu, f, B

其B+树索引结构如上图所示:数据记录单独存储;id作为主键,形成一棵索引树,叶子节点直接指向数据记录;name作为普通索引,也有一棵独立的索引树,叶子节点同样指向数据记录。

二、InnoDB的索引设计

InnoDB的主键索引与数据记录是存储在一起的,这种设计被称为聚集索引(Clustered Index)。

它没有独立的数据行存储区域;主键索引的叶子节点直接存储主键及其对应的完整数据记录(而非指针)。

正因如此,InnoDB基于主键的查询效率非常高。

由于这一特性,InnoDB表必须包含聚集索引:如果表定义了主键,则该主键就是聚集索引;如果表未定义主键,则第一个非空唯一列会被用作聚集索引;否则,InnoDB会自动创建一个隐藏的row-id作为聚集索引。

需要注意的是,聚集索引只能有一个,因为数据行在物理磁盘上只能有一份聚集存储。

InnoDB的普通索引则可以有多个,其实现方式与聚集索引有所不同:普通索引的叶子节点存储的是对应的主键值(而不是数据记录的指针)。

对于InnoDB表的设计,这里有几个实用建议:

尽量避免使用过长的列作为主键(例如char(64)),因为所有普通索引都会存储主键值,可能导致普通索引体积过大;建议使用趋势递增的整型作为主键,由于数据行与索引存储在一起,这样能够减少插入记录时因索引分裂和数据移动带来的性能开销。

仍然使用上面的例子,只是存储引擎换为InnoDB:

t(id PK, name KEY, sex, flag);

表中的四条记录不变:

1, shenjian, m, A
3, zhangsan, m, A
5, lisi, m, A
9, wangwu, f, B

其B+树索引结构如上图所示:id作为主键,数据记录和主键索引树存储在一起;name作为普通索引,有一棵独立的索引树,但其叶子节点存储的是对应记录的主键id值。

例如,当执行查询:

select * from t where name=‘lisi’;

这个过程会先通过name辅助索引定位到B+树叶子节点,获取到id=5,再通过聚集索引定位到具体的行记录。

也就是说,这个查询实际上扫描了两遍索引树。

三、核心要点总结

MyISAM和InnoDB都使用B+树来实现索引,但设计思路截然不同:

MyISAM的索引与数据分开存储,其索引叶子节点存储的是指向数据的指针,主键索引与普通索引在结构上差异不大;InnoDB的聚集索引将数据行与索引统一存储,其聚集索引的叶子节点存储数据行本身,而普通索引叶子节点存储主键值;InnoDB表必须有且只有一个聚集索引;建议使用趋势递增的整数作为InnoDB的主键,而不宜使用过长的列作为主键。

了解其背后的实现原理,比单纯记住结论更为重要。

掌握设计思路往往比技术细节更具价值。

来源:https://www.51cto.com/article/831043.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

MySQL主键与唯一索引约束的核心差异详解
科技数码
MySQL主键与唯一索引约束的核心差异详解

对于主键与唯一索引约束,执行insert和update时,会触发约束检查, InnoDB违反约束时,会回滚对应SQL,互联网大数据量高并发量业务,为了大家的身心健康,请使用InnoDB。 今天聊聊M

热心网友
01.28
面试官:什么是 Next-Key Lock?作用是什么?
科技数码
面试官:什么是 Next-Key Lock?作用是什么?

Next-Key Lock 是 InnoDB 引擎行锁加间隙锁的组合,它锁住的是一个前开后闭的区间,消除了 REPEATABLE READ 隔离级别下的幻读问题。 Next-Key Lock 是 I

热心网友
12.15
MySQL索引详解:MyISAM与InnoDB的B+树区别
科技数码
MySQL索引详解:MyISAM与InnoDB的B+树区别

MySQL 的 MyISAM 和 InnoDB 存储引擎使用的索引使用的都是 B+ 树,那有什么区别呢?今天来聊一聊这个话题。 MySQL 的 MyISAM 和 InnoDB存储引擎使用的索引使用的

热心网友
12.10
MyISAM与InnoDB索引差异详解:B+树的不同实现对比
科技数码
MyISAM与InnoDB索引差异详解:B+树的不同实现对比

InnoDB 和 MyISAM 是怎么利用 B+ 树来实现这两类索引,其又有什么差异呢?这是今天要聊的内容。 数据库的索引分为主键索引(Primary Inkex)与普通索引(Secondary I

热心网友
12.03

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

比特币重探7万美元,市场已全面消化美伊战争风险?
web3.0
比特币重探7万美元,市场已全面消化美伊战争风险?

清明节假期期间,A 股和港股休市,但比特币行情永不停歇。 4月6日,当多数市场还在假期中沉睡时,比特币已经悄然启动。价格从亚洲早盘的低点67400美元出发,一路向上试探,盘中最高涨破70300美元,不仅刷新了3月26日以来的高位,较日内低点的涨幅也超过了4%。以太坊的表现同样不俗,从2050美元附近

热心网友
04.07
魏思琪换上新机!REDMI K90至尊版来了 小米首款风冷旗舰
网络安全
魏思琪换上新机!REDMI K90至尊版来了 小米首款风冷旗舰

4月5日消息,日前,REDMI K90至尊版通过3C认证,预计将于本月发布。今日,小米中国区市场部总经理魏思琪用小米新机发布微博,不出意外,这正是即将登场的REDMI K90至尊版,这将是小米首款配

热心网友
04.07
WPS动态交互图表制作指南:让数据变化直观呈现
电脑教程
WPS动态交互图表制作指南:让数据变化直观呈现

WPS演示中图表不随数据更新时,可通过四种方法实现自动同步:一、用OFFSET+COUNTA定义动态名称绑定图表;二、用组合框控件联动VLOOKUP提取数据;三、用数据透视图配合切

热心网友
04.07
“链接未来·智汇静安”区块链创新应用优秀场景分享(四)| 信医基于区块链与隐私计算的真实世界研究数据产品
科技数码
“链接未来·智汇静安”区块链创新应用优秀场景分享(四)| 信医基于区块链与隐私计算的真实世界研究数据产品

聚焦数字技术,释放创新动能。为集中展示静安区区块链技术从“实验室”走向“应用场”的丰硕成果,挖掘一批可复制、可推广的行业解决方案,加速构建区块链产业生态闭环,静安区数据局特推出“静安区区块链创新应用

热心网友
04.07
天上的马桶与地上的火药桶,都在让美国出糗
科技数码
天上的马桶与地上的火药桶,都在让美国出糗

太空中的马桶堵了,边飞边修还能勉强用。但中东被点燃的火药桶,美国怎么来扑灭?靠一再延期的“最后通牒”?还是靠无底线的轰炸?2300万美元的马桶美国航空航天局4名宇航员1日搭乘“猎户座”飞船升空,执行

热心网友
04.07