MyISAM
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理。
InnoDB
InnoDB的最大特色就是支持了ACID兼容的事务功能
MyISAM、InnoDB区别
事务
MyISAM不支持事务,但是每次查询都是原子的
InnoDb 是事务安全型的,支持 ACID 的事务,支持事务的四种隔离级别
外键
MyISAM不支持外键
InnoDB支持外键,对一个包含外键的InnoDB表转为MYISAM会失败
索引
InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。
MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高; mysql 5.7以后的InnoDB也支持全文索引了
InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己生产一个隐藏列Row_id来充当默认主键),而Myisam可以没有
锁粒度
MyISAM支持表级锁,即每次操作是对整个表加锁
InnoDB支持表、行(默认)级锁
存储结构
一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件
一个 InnoDb 引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里)、也有可能为多个,但是受操作系统文件大小的限制(设置为独立表空,表大小受操作系统文件大小限制,一般为 2G)
Myisam存储文件是frm、MYD、MYI,frm是表定义文件,myd是数据文件,myi是索引文件
Innodb存储文件有frm、ibd,frm是表定义文件,ibd是数据文件
表行数
MyISAM保存有表的总行数,如果select count(*) from table;会直接取出出该值。
InnoDb不存储总行数