一、存储结构
每个myisam的表在磁盘空间上有三个文件,表定义文件(.frm),数据文件(.MYD),索引文件(MYI)
Innodb:所有表都存储在同一个数据文件(也可能是多个,或者独立的表空间)
二、存储空间
MYISAM:可被压缩,存储空间较小。
Innodb:需要更多的内存和存储,会在主内存建立其专用的缓冲池用于高速缓冲数据和索引。
MYISAM的索引是和数据分开的,并且是可压缩的,内存使用率对应的提高了不少,二Innodb是索引和数据紧密
捆绑的,没有使用压缩从而造成Innodb比MYISAM体积庞大不少
三、事务处理
MYISAM类型的表强调的是性能,其执行速度比Innodb要快得多,但是不支持外键,不提供事务支持。
Innodb提供事务支持事务,外键等高级数据库功能。
四、CURD
如果执行大量的SELECT操作,MYISAM是更好的选择
如果是UPDATE,INSERT出于性能考虑,Innodb是更好的选择
DELETE操作时Innod不会重新建立表,而是一行一行的删除。而MYISAM则是重新建立表。
五、AUTO_INCREMENT
MYISAM:可以和其它字段一起建立联合索引。引擎自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以通过前面几列排序后递增。
Innodb必须包含该只有该字段的索引。引擎自动递增必须是索引,如果是组合索引也必须是组合索引第一列。
六、表的具体函数
MYISAM:保存表的总行数,如果select count(*) from table直接取出该值
Innodb:没有保存表的总行数,如果select count(*) from table就会遍历整个表,消耗会相当的大,但是在
加了where后MYISAM和Innodb处理方式都一样
七、全文索引
MYISAM:支持全文索引(fuultext)。不支持中文
Innodb:不支持全文索引(fulltext)。但Innodb可以使用sphinx插件支持全文索引,并且效果更佳
八、表锁差异
MYISAM:支持表锁。
Innodb:支持事务和行锁,是Innodb最大特色。行锁大幅度提高了多用户的并发操作性能,但是Innodb的
行锁不是绝对的,行锁只在where主键是有效的非主键where都会进行表锁