MySQL存储引擎有很多,本文只围绕工作中常用的MySQL存储引擎InnoDB、MyISAM、Memory以及一个比较新的存储引擎TokuDB进行说明。
1. MyISAM
描述: MySQL5.1以前的默认存储引擎
优点:
- 读取速度快
- 支持全文索引
缺点:
- 使用表锁保证数据一致性,带来很多性能问题,高并发性能差
- 不支持事务
- 不支持外键
- 崩溃后无法安全恢复
适用场景:
- 对于只读的数据,或者表比较小、可以忍受崩溃所带来的修复操作,可以使用此存储引擎。
2. Memory
描述: 将数据存放在内存中的存储引擎
优点:
- 读取速度快
- 默认使用Hash索引
缺点:
- 不支持事务
- 表锁,并发写入性能差
- 不支持BLOB或TEXT类型的列
- 可能导致空间浪费,每行长度固定所以即使使用了VARCHAR也会存储为CHAR
- 重启后数据丢失
使用场景:
- MySQL在执行查询过程中用Memory存储引擎保存临时表,当然了,如果中间结果太大超出了Memory表的限制,或者含有BLOB或TEXT字段,则临时表会转换为MyISAM表。
- 用于缓存周期性聚合数据
- 用于保存数据分析过程中的中间数据
3. InnoDB
描述: 当前MySQL的默认引擎
优点:
- 使用行锁保证数据一致性,支持高并发写入
- 支持事务
- 支持外键
缺点:
- 不支持全文索引
- 在数据量大于200w时性能急剧下降
适用场景:
- 适用于大部分场景,当前线上项目多使用InnoDB存储引擎。如果数据量太大,就要考虑数据切分或将部分数据做归档了。
4. TokuDB
缺点:
- 需要额外安装
- 只支持Linux系统
优点:
- 在事务机制下TokuDB的写入速度是InnoDB的9-20倍
- 数据压缩比是InnoDB的14倍
适用场景:
- 适用于写多读少的场景
- 可以用作数据归档
5. 总结
- MyISAM引擎因为其高并发写入速度慢,不支持事务,崩溃后难以维护,因此不推荐使用MyISAM存储引擎了。除非某些特殊需求(比如全文索引)。
- InnoDB存储引擎适用于绝大部分场景,这也是当前MySQL的默认存储引擎。
- Memory存储引擎将数据存储在内存中,读取速度快,但其高并发写入速度并无优势。使用的最多的场景是在做查询时MySQL优先用此存储引擎存储中间表,此部分无需人为干预。
- TokuDB是一个比较新的存储引擎,同样支持事务,写入速度快,数据压缩比高,需要大量写入数据时可以用此存储引擎,可用于存储归档不常访问的数据。
本文地址:https://blog.csdn.net/qq_14945437/article/details/107150357