主要区别
- InnoDB支持事务,而MyISAM不支持事务,InnoDB中每条sql语句默认是一个事务,所以在使用的时候推荐在begin和commit之间添加多条语句,手动组装一个事务
- InnoDB支持外键,而MyISAM不支持外键,如果将拥有外键的InnoDB表转成MyISAM会失败报错
- InnoDB采用的是聚集索引,数据和索引是绑定在一起的,必须要有主键,主键索引的效率很高,通过辅助索引需要查询两次,通过辅助索引查询到主键索引,再用主键索引查询到数据,因此主键不能太大;而MyISAM是非聚集索引,数据和索引是分开的,索引里面保存的是指向数据的指针,主键索引和辅助索引是独立的
- InnoDB不保存表的具体行数,使用select count时会全表扫描,速度很慢,但是MyISAM会保存表的具体行数,查询起来很快
- InnoDB支持行级锁,行锁提高了多用户并发的操作性能,但是行锁只在WHEREd的主键是有效的,非主键的WHERE会锁全表;MyISAM支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
网友评论