InnoDB、MyISAM存储引擎
区别
1、InnoDB是mysql的默认存储引擎(mysql5.5.5之前是MyISAM)
2、InnoDB支持事务,MyISAM不支持事务。
3、InnoDB适合频繁修改及安全性较高的应用,MyISAM适合查询及插入为主的应用
4、InnoDB支持外键,MyISAM不支持外键
5、InnoDB不保存表的行数,如select count() from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只需要读出保存好的行数就行了。注意,当count()语句包含where条件的时候MyISAM也需要扫描整个表
6、InnoDB支持行锁(某些情况下还是锁整表,如update table set a = 1 where user like '%lee%')
注:锁还需查
两个引擎的选择
1、使用事务时,选InnoDB,由于锁的粒度小,写操作是不会锁定全表的,所以在高并发情况下使用会提高效率
2、大容量数据时使用InnoDB,它支持事务处理和故障恢复,可以利用数据日志来进行数据恢复。主键的查询也是在InnoDB比较快
3、如果表的读操作远远大于写操作时,并且不需要支持事务的,可以使用MyISAM
4、大批量插入语句时(insert)在MyISAM中比较快,但update在InnoDB比较快,尤其是高并发的时候
附:Memory存储引擎(内存存储引擎),但一般生产环境中不建议使用内存表,主要有两点
1、内存表不支持行锁,只支持表锁,一旦表有更新,就会阻塞该表的其他操作,包括读操作,就会影响表的并发性
2、数据的持久性不好,如果数据库宕机,那么内存中的数据就会丢失。