MyISAM存储引擎
MyIsam 的存储文件有三个,后缀名分别是 .frm、.MYD、MYI,其中 .frm 是表的定义文件,.MYD 是数据文件,.MYI 是索引文件。MyIsam 只支持表锁,不支持事务。MyIsam 由于有单独的索引文件,在读取数据方面的性能很高。Myisam是以堆结构进行组织数据,其表容易损坏。
InnoDB
InnoDB 的存储文件有两个,后缀名分别是 .frm 和 .idb,其中 .frm 是表的定义文件,而 idb 是数据文件。InnoDB 中存在表锁和行锁,不过行锁是在命中索引的情况下才会起作用。InnoDB 支持事务,且支持四种隔离级别(读未提交、读已提交、可重复读、串行化),默认的为可重复读。
两种存储引擎的对比
MyISAM和InnoDB两种存储引擎都采用了B+树的数据结构,但具体实现方式完全不同。
![MyISAM的B+树实现示例图](https://img-blog.csdnimg.cn/dc4f1fecbbf146c6a979c2dd8762c3f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd29uZ3lhYQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
MyISAM的B+树叶子节点存储的并不是数据,而是数据地址,因此也称为非聚集索引,搜索按照B+树的搜索算法进行。
![InnnDB的B+树实现示例图](https://img-blog.csdnimg.cn/dc8a4fc85a5a4a9aa8cdf714c35fa6a2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd29uZ3lhYQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
InnoDB的B+树叶子节点存储的就是数据本身,因此也称为聚集索引。从实现数据结构可知,如采用InnoDB存储引擎,不宜设置过长的主键。另外,使用InnoDB尽量采用自增(自减)的数据为主键,否则,由于叶子结点处直接存储数据的原因(数据即为索引),会造成频繁的B+的分裂合并调整,效率十分低下。从数据结构的实现看出,当读写更新比较频繁,读写一致性要求很高的业务,采用InnoDB更佳。