InnoDB
优点:
- InnoDB 采用MVCC 来支持高并发
- 支持事务(ACID)
- 行级锁定,通过索引实现,全表扫描仍然会锁定整个表。
- 支持分区、表空间
- 支持外键,单不支持全文索引(5.5以后不支持)
- 有高效的缓存,能缓存索引、数据
- 读写阻塞与事务隔离级别相关
- InnoDB 表基于聚簇索引建立,聚簇索引有很好的查询性能,不过它的二级索引(Secondary index,非主键索引)中必须包含主键列
- 通过一些机制可以实现热备(MySQL Enterprise Backup、Percona的 XtraBackup)
缺点:
- 与MyISAM 相比, InnoDB对硬件要求比较高
- 内部实现很复杂,不容易理解
适用场景:
- 支持事务的业务(下单、交易、转账等等)
- 读写都比较频繁的场景
- 数据一致性要求比较高的业务(转账、充值)
- 硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存使用率,尽可能的较少磁盘的I/O
- 行级锁定对高并发有很好的适用能力,但需要确保查询是通过索引来来完成的。
MyISAM
优点:
- 支持全文索引、压缩、空间函数(GIS)
- 支持表锁,读取时,对表增加共享锁,写入时,对表加排他锁
- 只会缓存索引
- 读取速度较快,占用资源相对少
- 支持压缩表,创建并导入数据后,如果不再进行修改操作,可以采用MyISAM压缩表(如果需要再修改,需要先解压缩,再修改数据,完成后再压缩)
- 设计简单,数据以紧密格式存储
缺点:
- 不支持事务和行级锁
- 奔溃后无法安全恢复
- 存在的问题,还是表锁的问题
适用场景:
- 只读的数据,或者表比较小
- blog 、数据字典、日志等不需要事务或读多写少的功能
参考:
[1] 《高性能MySQL》
[2] https://blog.csdn.net/m0_37814112/article/details/78633136