MySQL中的数据用各类不一样的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不一样的存储机制、索引技巧、锁定水平而且最终提供普遍的不一样的功能和能力。经过选择不一样的技术,你可以得到额外的速度或者功能,从而改善你的应用的总体功能。这些不一样的技术以及配套的相关功能在MySQL中被称做存储引擎(也称做表类型)。MySQL默认配置了许多不一样的存储引擎,能够预先设置或者在MySQL服务器中启用。你能够选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你须要你的数据结合什么性能和功能的时候为你提供最大的灵活性。
使用如下命令能够查看MySQL支持的引擎:html
mysql> show engines;
默认的存储引擎,提供高速存储和检索,以及全文搜索能力。
不支持事务。表级锁。不能在表损坏后恢复数据。
每一个表会生成三个文件(文件名就是表名):
.frm 表结构;
.MYD 数据;
.MYI 索引。
适合在如下几种状况下使用:
1.作不少count的计算
2.查询很是频繁mysql
具备提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
基于聚簇索引创建,聚簇索引对主键查询有很高的性能。不过它的二级索引(secondary index,非主键索引)中必须包含主键列,因此若是主键列很大的话,其余的全部索引都会很大。所以表上的索引较多的话,主键应当尽量的小。
支持事务和外键。行级锁。
适合在如下几种状况下使用:
1.更新和查询都至关的频繁,多重并发
2.要求事务,或者可靠性要求比较高
3.外键约束,MySQL支持外键的存储引擎只有InnoDB
通常来讲,若是须要事务支持,而且有较高的并发读取频率,InnoDB是不错的选择。sql
数据保存在内存中,拥有极高的插入、更新和查询效率。可是不稳定,重启之后数据都会丢失。
不支持事务。支持表级锁,所以并发写入的性能较低。
支持长度不变的数据类型,不支持BLOB或TEXT长度可变的数据类型。VARCHAR是一种长度可变的类型,但由于它在MySQL内部当作长度固定不变的CHAR类型,因此可使用。
每一个表会生成一个.frm文件,该文件只存储表的结构。
支持HASH索引和B-Tree索引,擎默认使用HASH索引。B-Tree索引的优于HASH索引的是,可使用部分查询和通配查询,也可使用<、>和>=等操做符方便数据挖掘。HASH索引进行“相等比较”很是快,可是对“范围比较”的速度就慢多了,所以HASH索引值适合使用在=和<>的操做符中,不适合在<或>操做符中,也一样不适合用在order by子句中。
在内存中存放数据,因此会形成内存的使用,能够经过参数max_heap_table_size控制MEMORY表的大小。数据库
拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩。
支持最基本的插入和查询两种功能。在MySQL 5.5开始支持索引。
不支持事务。支持行级锁和专用的缓存区,因此能够实现高并发的插入。
适合存储大量日志、历史数据。缓存
接受但不存储数据,可是若是MySQL启用了二进制日志,SQL语句被写入日志(并被复制到从服务器)。
用于作日志记录或同步归档的中继存储。但这种应用方式会碰到不少问题,所以并不推荐。
支持事务,并且支持mvcc的行级锁。安全
每一个表会生成一个.CSV文件,将CSV类型的文件当作表进行处理。
把数据以逗号分隔的格式存储在文本文件中,这种文件是一种普通文本文件,每一个数据行占用一个文本行。
不支持索引,即便用该种类型的表没有主键列,也不容许表中的字段为null。
查看更多:
MySQL优化
MySQL锁详解
MySQL事务
MySQL索引类型性能优化
参考资料:
http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html
《MySQL性能优化与架构设计》
《百度百科》服务器