众所周知mysql的存储引擎中,比较火的就是myisam和innodb这两种,那么今天就来通过理论来分析一下这两种存储引擎之间的差别
MyISAM
myisam在mysql5.1之前呢都是mysql的默认存储引擎,每个myisam在磁盘上存储成三个文件,每个文件的名称都是通过表的名字开始的,有.frm存储表定义、.MYD存储表数据、.MYI存储表的索引。
InnoDB
innodb在mysql5.1以后呢是默认的存储引擎,它给mysql带来了事物、回滚、多版本并发控制的事物安全型表。innodb还提供了行级锁,但是必须是索引子段。
InnoDB和MyISAM的区别
1、InnoDB支持事物,MyISAM不支持。
2、聚集索引(innoDB)和非聚集索引(MyiSAM)上面的区别,InnoDB使用的是B+Tree作为索引结构,数据文件和主键索引绑在一起的,是必须要有主键的,通过主键索引效率很高。但是如果是辅助索引的话,就需要去辅助索引的索引树找到主键,通过主键再回表查数据。所以主键不能太大。
innoDB的主键索引树的子节点都是主键,而叶子索引才是数据文件,辅助索引的叶子节点则都是主键的值。
MyISAM也是使用的B+Tree作为的数据结构,索引和数据结构是分离,索引保存的是数据文件的指针。主键索引和辅助索引是独立的
总结,InnoDB的B+树的主键索引的叶子节点就是数据,辅助索引的叶子节点是主键,所以当通过辅助索引查询数据时,最后还是会通过主键再查询一下,速度较快。而MyISAM的B+树主键索引和辅助索引的叶子结点都是指向数据的指针,拿到指针以后再通过指针去拿数据,效率就可以看出来