一、MyISAM存储引擎
提供高速存储和检索,以及全文搜索能力。
不支持事务。表级锁。不能在表损坏后恢复数据。
适合在以下几种情况下使用:
1.做很多count的计算
2.查询非常频繁
二、InnoDB存储引擎
具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
基于聚簇索引建立,聚簇索引对主键查询有很高的性能。不过它的二级索引(secondary index,非主键索引)中必须包含主键列,所以如果主键列很大的话,其他的所有索引都会很大。因此表上的索引较多的话,主键应当尽可能的小。
支持事务和外键。行级锁。
适合在以下几种情况下使用:
1.更新和查询都相当的频繁,多重并发
2.要求事务,或者可靠性要求比较高
3.外键约束,MySQL支持外键的存储引擎只有InnoDB
一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。
三、MEMORY(HEAP)引擎
数据保存在内存中,拥有极高的插入、更新和查询效率。但是不稳定,重启以后数据都会丢失。
不支持事务。支持表级锁,因此并发写入的性能较低。
支持长度不变的数据类型,不支持BLOB或TEXT长度可变的数据类型。VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。
每个表会生成一个.frm文件,该文件只存储表的结构。
支持HASH索引和B-Tree索引,引擎默认使用HASH索引。B-Tree索引的优于HASH索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。HASH索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此HASH索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在order by子句中。
在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制MEMORY表的大小。
四、ARCHIVE引擎
拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩。
支持最基本的插入和查询两种功能。在MySQL 5.5开始支持索引。
不支持事务。支持行级锁和专用的缓存区,所以可以实现高并发的插入。
适合存储大量日志、历史数据。
五、BLACKHOLE引擎
接受但不存储数据,但是如果MySQL启用了二进制日志,SQL语句被写入日志(并被复制到从服务器)。
用于做日志记录或同步归档的中继存储。但这种应用方式会碰到很多问题,因此并不推荐。
支持事务,而且支持mvcc的行级锁。
六、CSV引擎
每个表会生成一个.CSV文件,将CSV类型的文件当做表进行处理。
把数据以逗号分隔的格式存储在文本文件中,这种文件是一种普通文本文件,每个数据行占用一个文本行。
不支持索引,即使用该种类型的表没有主键列,也不允许表中的字段为null。