一、InnoDB引擎
- 基本信息:InnoDB是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎。
- 应用场景:处理大量的短期事务
- 特性:
- InnoDBcaiyong MVCC来支持高并发,并且实现了四个标准的隔离级别,默认级别是可重复读,并且通过间隙锁策略防止幻读的出现;
- InnoDB通过一些机制和工具支持真正的热备份;
- InnoDB表时基于聚簇索引建立的,聚簇索引对主键的查询有很高的性能。不过它的二级索引中必须包含主键列,所以如果主键很大的话,其他索引都会很大。
二、MyISAM引擎
- 基本信息:在MySQL5.1及之前版本,MyISAM是默认存储引擎。提供了大量的特性,包括全文索引、压缩、空间函数等。但MyISAM不支持事务和行级锁,且有一个严重缺陷是:崩溃之后无法安全恢复。
- 特性:
- 加锁与并发:MyISAM对整个表加锁。读取是会对读到的所有表加共享锁,写入时则对表加排他锁。但是在表读取时,也可以向表中插入新的记录;
- 索引特性:对于MyISAM表,即使是BLOB和TEXT等长字段,也可以基于其前500个字符创建索引。同时MyISAM也支持全文索引,这是一种基于分词创建的索引,可以支持复杂查询。
- 延迟更新索引键:如果在创建MyISAM表时,指定了DELAY_KEY_WRITE选项,则在每次修改执行完成时,不会立即将修改的索引数据存入磁盘中,而是先写入到键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入到磁盘。这种方法极大的提升了写入的性能。
- MyISAM性能:MyISAM引擎设计简单,数据以紧密格式存储,所以在某些场景下的性能很好。最典型的性能问题还是表锁的问题。
- 应用场景:在创建并导入数据之后,不会进行修改操作。那个使用MyISAM引擎压缩表,减少磁盘空间占用,因此可以减少磁盘I/O,从而提升查询性能。压缩表也支持索引,但索引也是只读的。
三、Achive引擎
- 基本信息:Achive存储引擎只支持INSERT和SELECT操作,不是一个事务性引擎,而是一个针对高速插入和压缩做了优化的简单引擎。
- Achive存储引擎会缓存所有的写并利用zlib对插入的行进行压缩,所以比MyISAM的磁盘I/O更少。
- 特性:
- Achive引擎支持行级锁和专用缓冲区,所以可以实现高并发插入。
- 应用场景:每次SELECT查询都需要执行全表查询,所以Achive表适合日志和数据采集类应用,这类应用做数据分析时往往需要全表扫描。或者一些需要更快速INSERT操作的场景下使用。