请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

InnoDB和MyISAM的区别

(1)

老师你看看我这里理解正确吗?
InnoDB,在辅助索引查到的结果是主键id,如果需要更多信息,需要回表到主键索引再查一次。
而myISAM主键索引和辅助索引查询结果都是行数据,也就是说如果通过辅助索引查询,也无需回表?


(2)
InnoDB这么设计的原因是什么呢?我查询了解到好像是为了实现事务功能,但为什么能够因此实现事务没看懂。

正在回答 回答被采纳积分+3

1回答

翔仔 2023-12-13 16:09:25

同学好,

1.MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址,根据索引找到地址进行查询。InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这个时候叫聚簇索引;辅助索引查询的是主键id,如果不在索引中就是需要回表到主键索引查询。

2.不同的存储引擎设计都是根据其适用场景来的,通过对底层数据结构的设计,使对应的存储引擎可以更适应场景需求。InnoDB使用聚簇索引和辅助索引结合,能够实现高效的查询和更新;正是有了不同的索引,InnoDB通过给索引项加锁才实现了行级锁;行锁的实现才使得事务实现更简单

0 回复 有任何疑惑可以回复我~
  • 谢谢翔仔的回复,和前面的知识串联起来了。也就是说聚簇索引这种设计,将索引和数据放在一个文件里,InnoDB实现了更细粒度的锁,行级锁。而MyISAM索引文件和数据文件是分离的,不能实现行级锁,也就是表锁这种,这样理解对吗?
    回复 有任何疑惑可以回复我~ 2023-12-14 17:26:23
  • 补充一下,是因为MyISAM的索引是稀疏索引,InnoDB是密集索引,所以InnoDB能够锁定特定行。
    回复 有任何疑惑可以回复我~ 2023-12-15 16:37:27
  • 翔仔 回复 提问者 weixin_慕函数6469244 #3
    同学好,可以这么理解的
    回复 有任何疑惑可以回复我~ 2023-12-20 00:16:34
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信