专业编程基础技术教程

网站首页 > 基础教程 正文

【MySQL】InnoDB和MyISAM存储引擎对比

ccvgpt 2024-10-12 14:01:51 基础教程 7 ℃

什么是存储引擎(Save Engines)?

存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。

【MySQL】InnoDB和MyISAM存储引擎对比

存储引擎是数据库的核心,对于MySQL来说,存储引擎是以插件的形式运行的。虽然MySQL支持种类繁多的存储引擎,但是常用的就那么几种。这篇文章主要是对其进行一个总结和对比。

MySQL最常用的两种存储引擎:InnoDBMyISAM

InnoDB和MyISAM存储引警对比

相同点:都是B+索引

功能不同点:

InnoDB中的索引

Innodb结构为聚簇索引,索引和数据文件放在一个文件

包含2种索: 主键索引 (聚集索引) 辅助索引 (非聚集索引)

主键索引:每个表只有一个主键索引,b+树结构,叶子节点同时保存了主键的值也数据记录,其他节点只存储主键的值。

辅助索引:每个表可以有多个,b+树结构,叶子节点保存了索引字段的值以及主键的值,其他节点只存储索引指端的值。

MyISAM引擎中的索引

B+树结构,MyISM使用的是非聚簇索引

索引文件与数据文件都是单独的一个文件

如下图:为了更形象说明这两种索引的区别,我们假想一个表存储了4行数据,其中Id作为主索引,Name作为辅助索引,图中清断的显示了聚族索引和非聚族索引的差异。


我们看一下上图中数据检索过程

InnoDB数据检索过程

如果需要查询id=14的数据,只需要在左边的主键索引中检索就可以了。

如果需要搜索name='Ellison”的数据,需要2步:

1.先在辅助索引中检索到name=’Ellison”的数据,获取id为14

2.再到主键索引中检索id为14的记录

辅助索引这个查询过程在mysql中叫做回表。

MyISAM数据检索过程

1.在索引中找到对应的关键字,获取关键字对应的记录的地址

2.通过记录的地址查找到对应的数据记录

我们用的最多的是innodb存储引擎,所以此处主要说一下innodb索引的情况,innodb中最好是采用主键查询,这样只需要一次索引,如果使用辅助索引检索,涉及到回表操作,比主键查询要耗时一些。

innodb中辅助索引为什么不像myisam那样存储记录的地址?

表中的数据发生变更的时候,会影响其他记录地址的变化,如果辅助索引中记录数据的地址,此时会受影响,而主键的值一般是很少更新的,当页中的记录发生地址变更的时候,对辅助索引是没有影响的。


--END--

欢迎关注【辉哥传书vlog】头条号,喜欢记得点赞、收藏、评论、转发哦!

最近发表
标签列表