1.InnoDB 存储引擎
- 1.简介
作为mysql默认的事务型引擎。用来处理大量的的短期事务,其性能与自动崩溃恢复的特性,使其在非事务型存储中也得到了广泛的运用。在没有非常特殊的要求的情况下,优先选择InnoDB。 - 2.特性:
① 采用mvcc来支持高并发,实现了四个隔离级别。默认为可重复读(REPEATABLE READ),并且使用间隙锁(next-key locking)策略来防止幻读。
② InnoDB表是基于聚簇索引建立的,聚簇索引对住建查询有高的执行性能。InnoDB存储格式是平台独立的。
③ 从磁盘读数据时,采用可预测性预读。能够在内存中创建hash索引以加速读操作的自适应哈希索引。能够加速插入操作的插入缓冲区等。
④ 作为事务型的存储引擎,InnoDB通过一些机制和工具支持真正的热备份。
2.MyISAM 存储引擎
- 1.简介
在Mysql5.1及其以前的版本,MyISAM作为默认的存储引擎。提供了大量的特性,包括全文索引、压缩、空间函数等。但是MyISAM不支持事务和行级锁,崩溃后无法安全恢复。MyISAM会将表存储在两个文件中:数据文件和索引文件。 - 2.特性
加锁与并发
MyISAM会对整张表加锁,因为不支持行级锁,读取时加入共享锁(读锁),写入时加入排他锁。在有查询的时候,也可以往表里插入新数据(插入并发)。
修复
执行表的修复可能导致一些数据丢失,而且修复操作是非常慢。
索引特性
对于MyISAM表,即使BLOB和TEXT也可进行索引,基于字段前500个字符创建索引。支持全文索引,基于分词创建索引,支持复杂查询。
延迟更新索引键
在设置了DELY_KEY_WRITE选项,每次执行修改时,不会立刻将修改的索引写入磁盘,先写入内存的键缓冲区,在清除键缓冲区或者关闭表时,才会将修改的索引写入磁盘。可以设置单表,也可以设置全局。
压缩表
在表创建和导入数据以后,不做任何操作了,可以对这样子的表进行MyISAM压缩。压缩表之后不能进行修改,压缩表可以减少磁盘占用空间,减少磁盘I/O,提升查询性能。
Archive 引擎
- 1.简介
Archive存储引擎只支持insert和select操作,在Mysql5.1之前不支持索引。会缓存所有的写并利用zlib对插入进行压缩,比MyISAM占用I/O少。每次查询操作都要扫描全表。Archive适合做日志和数据采集类的应用或者在一些需要快速插入的场景。 - 2.特性
支持行级锁和专用的缓冲区,可以实现高并发的插入。在一个查询操作开始直到结束之前,其他查询操作是不可用的。在批量插入完成之前,其他读操作是不可见的。Archive不是一个事务型的引擎,是一个高速插入和压缩的简单引擎。
Blackhole 引擎
- 没有实现任何的存储机制,会丢弃所有插入的数据,不做任何保存。可以用于复制数据到备库,或者简单的记录一下日志。
GSV 引擎
- 可以将普通的GSV文件(逗号分割值得文件)作为mysql的表来处理,但是不支持索引。可以作为一个数据交换的中间媒介。导入非mysql的文件,如EXCEL、CSV等文件导入和导出。
Federated 引擎
- 作为访问mysql服务器的一个代理,会创建一个远程连接mysql服务器的客户端连接,并将查询传输到远程服务器进行执行,并将得到的数据进行返回。
Memory 引擎
- 1.简介
快速访问数据,并且不修改这些数据,重启以后丢失数据也没有关系,可以使用此存储引擎。比MyISAM表快一个数量级,数据保存在内存中,不进行I/O磁盘。Memory在重启之后,结构会保留,但是数据会丢失。 - 2.使用场景
①用于查询或者映射表。
②用于缓存周期性聚合数据的结果。
③用于保存数据分析产生的中间数据。 - 3.特性
支持hash索引,查询非常快。Memory表是表级锁,因此写入比较慢。不支持BLOB和TEXT的类型的列,并且每行的长度都是固定的。在执行查询的过程中,会使用大量的临时表来保存中间结果。内部使用的临时表就是Memory表。在中间表太大超出Memory的限制,或者含有BLOB和TEXT字段,或转化为MyISAM表。 - 4.与临时表的区别
临时表使用CREATE TEMPORARY TABLE来创建,它可以使用任何存储引擎。临时表在连接时可见,断开连接后就消失。
Merge 引擎
- Merge是MyISAM的一个变种。Merge表是由多个MyISAM表合并而来的虚拟表。主要用于日志和数据仓库。
NDB 集群引擎
- 作为SQL和NDB原生协议之间的接口。