mysql 支持的存储引擎包括:InnoDB存储引擎、MyISAM存储引擎、NDB存储引擎、Memory存储引擎、Archive存储引擎、Federated存储引擎、Maria存储引擎 等
一、InnoDB 存储引擎
支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键,默认读取操作不会产生锁。从 MySQL 数据库 5.5.8 版本开始,InnoDB 存储引擎是默认的存储引擎。
InnoDB 存储引擎将数据放在一个逻辑的表空间。从 MySQL 4.1 版本开始,他可以将每个 InnoDB 存储引擎的表单独存放到一个独立的 ibd 文件中。
InnoDB 通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了 SQL 标准的 4 种隔离级别,默认为 repeatable 级别。InnoDB 存储引擎还提供了插入缓冲(insert buffer
)、二次写(double write
)、自适应哈希索引(adaptive hash index
)、预读(read ahead
)等高性能和高可用的功能。
对于表中数据的存储,InnoDB 存储采用了聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显式的表定义时指定主键,InnoDB 存储引擎会为每一行生成一个 6 字节的 row_id,并以此作为主键。
二、MyISAM 存储引擎
不支持事务、不支持表锁设计,支持全文索引。主要面向一些 OLAP 型的数据库应用。在 MySQL 5.5.8 之前,MyISAM 存储引擎是默认的存储引擎。
MyISAM 存储引擎有一个与众不同的地方是他的缓冲池只缓存索引文件,而不缓冲数据文件,MyISAM 存储引擎表由 MYD 和 MYI 组成,MYD 用于存放数据文件,MYI 用来存储索引文件。
三、NDB 存储引擎
NDB 存储引擎是一个集群存储引擎。特点是数据全部存放在内存中(从 MySQL 5.1 开始,可以将非索引数据放在磁盘上),因此主键查找的速度极快,并且通过添加 NDB 数据存储节点,可以线性的提高数据库性能,是高可用、高性能的集群系统。
四、Memory 存储引擎
Memory 存储引擎将表中的数据存放在内存中,如果数据库重启或者发生崩溃,表中的数据都将消失。他非常适合用于存储临时数据的临时表。Memory 存储引擎默认使用哈希索引。
Memory 存储引擎虽然速度非常快,但在使用上还是有一些限制。比如,只支持表锁,并发性能较差,并且不支持 TEXT 和 BLOB 列类型。
五、其他存储引擎
- Archive 存储引擎:只支持 INSERT、SELECT 操作。Archive 存储引擎使用 zlib 算法将数据行进行压缩后存储,压缩比一般可以达到
1:10
。因此非常适合存储归档数据,如日志信息。使用行锁来实现高并发的插入操作,但是其本身并不是事务安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。 - Federated 存储引擎:并不存储数据,他只是指向一台远程 MySQL 数据库服务器上的表
- Maria 存储引擎:特点是支持缓存数据和索引文件,应用了行锁设计,提供了 MVCC 功能,支持事务和非事务安全的选项,以及更好的 BLOB 字符类型的处理性能。
六、各存储引擎之间的比较
