采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
(1)
老师你看看我这里理解正确吗? InnoDB,在辅助索引查到的结果是主键id,如果需要更多信息,需要回表到主键索引再查一次。 而myISAM主键索引和辅助索引查询结果都是行数据,也就是说如果通过辅助索引查询,也无需回表?
(2) InnoDB这么设计的原因是什么呢?我查询了解到好像是为了实现事务功能,但为什么能够因此实现事务没看懂。
同学好,
1.MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址,根据索引找到地址进行查询。InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这个时候叫聚簇索引;辅助索引查询的是主键id,如果不在索引中就是需要回表到主键索引查询。
2.不同的存储引擎设计都是根据其适用场景来的,通过对底层数据结构的设计,使对应的存储引擎可以更适应场景需求。InnoDB使用聚簇索引和辅助索引结合,能够实现高效的查询和更新;正是有了不同的索引,InnoDB通过给索引项加锁才实现了行级锁;行锁的实现才使得事务实现更简单
谢谢翔仔的回复,和前面的知识串联起来了。也就是说聚簇索引这种设计,将索引和数据放在一个文件里,InnoDB实现了更细粒度的锁,行级锁。而MyISAM索引文件和数据文件是分离的,不能实现行级锁,也就是表锁这种,这样理解对吗?
补充一下,是因为MyISAM的索引是稀疏索引,InnoDB是密集索引,所以InnoDB能够锁定特定行。
同学好,可以这么理解的
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.8k 27
2.7k 22
1.3k 15
1.5k 14
1.3k 14