主要区别如下:
每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;而myisam强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
索引和主键的表存在,索引都是保存行的地址;而InnoDB如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
4、外键差异。MyISAM不支持外键,而innodb支持外键。
5、存储结构。每个MyISAM表在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。而innodb是由.frm文件、表空间(分为独立表空间或者共享表空间,如果在配置文件中配置了innodb_file_per_table=true或者不配置就会使用独立表空间)和日志文件(redo log)组成。
6、全文索引。MyISAM支持 FULLTEXT类型的全文索引;InnoDB的不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好,而且自从mysql5.6版本开始innodb就已经开始支持全文索引,mysql8.0则完全抛弃MyISAM存储引擎了,所以淡化MyISAM吧,已经逐渐成为历史产品,nnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引。。
7、都是B+树索引,Innodb是索引组织表,myisam是堆表,索引组织表和堆表的区别要熟悉;