MySQL存储引擎选择

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的默认引擎

优点:

  • 使用行锁保证数据一致性,支持高并发写入
  • 支持事务
  • 支持外键

缺点:

  • 不支持全文索引
  • 在数据量大于2000w时性能急剧下降

适用场景:

  • 适用于大部分场景,当前线上项目多使用InnoDB存储引擎。如果数据量太大,就要考虑数据切分或将部分数据做归档了。

4. TokuDB

缺点:

  • 需要额外安装
  • 只支持Linux系统

优点:

  • 在事务机制下TokuDB的写入速度是InnoDB的9-20倍
  • 数据压缩比是InnoDB的14倍

适用场景:

  • 适用于写多读少的场景
  • 可以用作数据归档

5. 总结

  • MyISAM引擎因为其高并发写入速度慢,不支持事务,崩溃后难以维护,因此不推荐使用MyISAM存储引擎了。除非某些特殊需求(比如全文索引)。
  • InnoDB存储引擎适用于绝大部分场景,这也是当前MySQL的默认存储引擎。
  • Memory存储引擎将数据存储在内存中,读取速度快,但其高并发写入速度并无优势。使用的最多的场景是在做查询时MySQL优先用此存储引擎存储中间表,此部分无需人为干预。
  • TokuDB是一个比较新的存储引擎,同样支持事务,写入速度快,数据压缩比高,需要大量写入数据时可以用此存储引擎,可用于存储归档不常访问的数据。

你可能感兴趣的:(MySQL)