为什么有多种存储引擎:
- 因为我们有不同的业务需求,所以会有很多的存储引擎
- 比如一张表不需要持久化,但需要很高的访问速度
- 或者只用来存放历史数据,不需要修改或索引,还需要支持数据压缩
- 或者一张表需要很高的读写并发,需要读写不干扰,还要保证比较高的数据一致性
存储引擎比较:
myisam:应用范围比较小,适合只读类的数据分析的项目
- 支持表级别的锁(插入和更新会锁表),不支持事务
- 拥有较高的插入和查询速度
- 存储了表的行数(count速度更快)
innodb:适合经常更新的表、存在并发读写或者有事务处理的业务系统中
- 支持事务,支持外键,因此数据的完整性、一致性更高
- 支持行级别的锁和表级别的锁
- 支持读写并发,写不堵塞读(MVCC)
- 特殊的索引存放方式,可以减少id,提升查询效率
- 为了保证数据的完整性,还支持外键引用完整性约束
memory:适合做临时表
- 数据放在内存中,读写速度很快
- 崩溃或重启,数据丢失
- 默认使用哈希索引
存储引擎的选择:
- 如果对一致性要求比较高,需要事务操作,选innodb
- 如果数据读多写少,对查询性能要求比较高,选myisam
- 如果需要一个用于查询的临时表,用memory
- 或者根据官方提供的存储引擎规范自行开发