InnoDB 和 MyISAM 存储引擎对比
🔊InnoDB 和 MyISAM 存储引擎对比
相同点:都是 B+索引,不清楚 B+索引的可以看上一篇
📕InnoDB 中的索引
Innodb 结构为聚簇索引,索引和数据文件放在一个文件
,包含 2 种索引:主键索引(聚集索引)、辅助索引(非聚集索引)。
主键索引:每个表只有一个主键索引,b+树结构,叶子节点同时保存了主键的值也数据记录,其他节点只存储主键的值。
辅助索引:每个表可以有多个,b+树结构,叶子节点保存了索引字段的值以及主键的值,其他节点只存储索引指端的值。
🖥️MyISAM 引擎中的索引
B+树结构,MyISM 使用的是非聚簇索引
索引文件与数据文件都是单独的的一个文件
如下图:为了更形象说明这两种索引的区别,我们假想一个表存储了 4 行数据。其中 Id 作为主索引,Name 作为辅助索引,图中清晰的显示了聚簇索引和非聚簇索引的差异。
我们看一下上图中数据检索过程。
📌InnoDB 数据检索过程
如果需要查询 id=14 的数据,只需要在左边的主键索引中检索就可以了。
如果需要搜索 name=’Ellison’的数据,需要 2 步:
先在辅助索引中检索到 name=’Ellison’的数据,获取 id 为 14
再到主键索引中检索 id 为 14 的记录
辅助索引这个查询过程在 mysql 中叫做回表
📇MyISAM 数据检索过程
在索引中找到对应的关键字,获取关键字对应的记录的地址
通过记录的地址查找到对应的数据记录
我们用的最多的是 innodb 存储引擎,所以此处主要说一下 innodb 索引的情况,innodb 中最好是采用主键查询,这样只需要一次索引,如果使用辅助索引检索,涉及到回表操作,比主键查询要耗时一些。
innodb 中辅助索引为什么不像 myisam 那样存储记录的地址?
表中的数据发生变更的时候,会影响其他记录地址的变化,如果辅助索引中记录数据的地址,此时会受影响,而主键的值一般是很少更新的,当页中的记录发生地址变更的时候,对辅助索引是没有影响的
🖊️最后总结
🖲要熟练掌握技巧,一定多多坚持练习:骐骥一跃,不能十步;驽马十驾,功在不舍。
版权声明: 本文为 InfoQ 作者【javaNice】的原创文章。
原文链接:【http://xie.infoq.cn/article/9e0d35707063ead97695f0ea3】。文章转载请联系作者。
评论