InnoDB存储引擎

(1)可以通过自动增长列,方法是auto_increment。

(2)支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。

(3)使用的锁粒度为行级锁,可以支持更高的并发;

(4)支持外键约束;外键约束其实降低了表的查询速度,但是增加了表之间的耦合度。

(5)支持在线热备份;

(6)在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度;

(7)对于InnoDB类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。数据和索引放在一块,都位于B+数的叶子节点上;

(8)支持类似于Oracle的非锁定读,即默认读取操作不会产生锁;

(9)从MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。

InnoDB的存储表和索引有如下形式:

(1)使用共享表空间存储:所有的表和索引存放在同一个表空间中。

(2)使用多表空间存储:表结构放在frm文件,数据和索引放在IBD文件中。若使用分区表,每个分区对应单独的IBD文件。使用分区表的好处在于提升查询效率。

MyISAM存储引擎

不支持行级锁,只支持并发插入的表锁,主要用于高负载的select;

不支持事务;

MyISAM表是独立于操作系统的:.frm 存储表定义;.MYD 存储数据;.MYI 存储索引。

(1)大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持;

(2)每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16;

(3)最大的键长度是1000字节,这也可以通过编译来改变,对于键长度超过250字节的情况,一个超过1024字节的键将被用上;

(4)BLOB和TEXT列可以被索引;

(5)NULL被允许在索引的列中,这个值占每个键的0~1个字节;

(6)所有数字键值以高字节优先被存储以允许一个更高的索引压缩;

(7)每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操作的时候该列被更新,同时AUTO_INCREMENT列将被刷新。所以说,MyISAM类型表的AUTO_INCREMENT列更新比InnoDB类型的AUTO_INCREMENT更快;

(8)每个字符列可以有不同的字符集;

(9)有VARCHAR的表可以固定或动态记录长度;

(10)VARCHAR和CHAR列可以多达64KB。

MyISAM类型的表支持三种不同的存储结构:

1)静态型:指定义的表列的大小是固定(即不含有:xblobxtextvarchar等长度可变的数据类型),这样MySQL就会自动使用静态MyISAM格式;

2)动态型:如果列(即使只有一列)定义为动态的(xblob, xtext, varchar等数据类型),这时MyISAM就自动使用动态型,虽然动态型的表占用了比静态型表较少的空间,但带来了性能的降低,随着数据变化的增多,碎片也随之增加,数据访问性能会随之降低;

3)压缩型:如果在数据库中创建在整个生命周期内只读的表,则应该使用MyISAM的压缩型表来减少空间的占用。

  • MEMORY存储引擎

所有的数据存储在内存中,默认使用哈希(HASH)索;支持的锁粒度为表级锁。

  • CSV 存储引擎

(1)是基于 CSV 格式文件存储数据;

(2)所有列必须强制指定 NOT NULL;

(3)CSV 引擎也不支持索引,不支持分区;

(4)CSV 存储引擎也会包含一个存储表结构的 .frm 文件,还会创建一个 .csv 存储数据的文件,还会创建一个同名的元信息文件,该文件的扩展名为 .CSM ,用来保存表的状态及表中保存的数据量;

(5)每个数据行占用一个文本行。

  • ARCHIVE

仅仅支持插入和查询;

在MySQL 5.5版以前不支持索引,但是在MySQL 5.5以后的版本支持;

使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

  • BLACKHOLE

不做实际存储;MySQL还是会正常的记录下Binlog,而且这些Binlog还会被正常的同步到Slave上,可以在Slave上对数据进行后续的处理。

应用场景:

(1)验证语法:验证dump file语法的正确性;

(2)检测负载:以使用blackhole引擎来检测binlog功能所需要的额外负载;

(3)检测性能:由于blackhole性能损耗极小,可以用来检测除了存储引擎这个功能点之外的其他MySQL功能点的性能。

  • FEDERATED

主要用于访问其它远程MySQL服务器一个代理,它通过创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取;在MariaDB上的实现是FederatedX。