目录
InooDB引擎:
具备外键支持功能的事务存储引擎。
InooDB是MySQL的默认事务性引擎,被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(commit)和回滚(rollback)。除了增加和查询外,还需要更新、删除,优先选择InooDB存储引擎。支持行级锁,操作时只锁某一行,不对其他行有影响,适合高并发的操作。
InooDB读写操作的处理效率差一些,对内存要求较高。
MyISAM引擎:
主要的非事务处理存储引擎。提供了大量的特性,包括全文索引、压缩、空间函数等。访问速度快,对事物完整性没有要求或者以SELECT、INSERT为主的应用。针对数据统计有额外的常数存储,所以COUNT(*)查询效率很高。只读应用或者以读为主的,优先选择MyISAM存储引擎。
不支持事务、行级锁、外键,崩溃后无法安全恢复。表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作。
InooDB引擎与MyISAM存储引擎的区别:
InooDB提供了良好的事务管理、崩溃修复能力和并发控制。因为InooDB支持事务,所以对于要求事务完整性的场合需选择InooDB。缺点是读写效率稍差,占用的数据空间相对比较大。
MyISAM提供了大量的特性,但是不支持事务、外键,崩溃后无法安全恢复。以读操作和插入操作为主,只有很少的更新、删除操作,并且对事物的要求没那么高,就可以选择MyISAM存储引擎。优点是占用空间小,处理速度快。缺点是不支持事物的完整性和并发性。
对比MyISAM的存储引擎,InooDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。
MyISAM只缓存索引,不缓存真实数据,InooDB不仅缓存索引还要缓存真实数据,对内存的要求较高,而且内存大小对性能有决定性的影响。
Archive引擎:
用于数据存档。仅支持插入和查询两种功能(行被插入后不能再修改)。
MySQL5.5以后支持索引功能。
拥有很好的压缩机制,使用zlib库,在记录请求时实时的进行压缩,经常被用来作为仓库使用。
创建ARCHINE表时,存储引擎会创建名称以表名开头的文件。数据文件的扩展名为.ARZ。
同样的数据量下,比MyISAM表要小大约75%,比InnoDB表小大约83%。
采用了行级锁。该ARCHIVE引擎支持auto_increment列属性,auto_increment列可以具有唯一索引或者非唯一索引。在其他列创建索引会导致错误。
适合日志和数据采集应用,适合存储大量的独立的作为历史记录的数据,拥有很高的插入速度,但是对查询的支持较差。
Blackhole引擎:
丢弃写操作,读操作会返回空内容。
Blackhole引擎没有实现任何存储机制,会丢弃所有插入的数据,不做任何保存。但是服务器会记录Blackhole表的日志,所以可以用于赋值数据到备库,或者简单地记录到日志,但是有很多问题。
CSV引擎:
存储数据时,以逗号分隔各个数据项。
CSV引擎可以将普通的CSV文件作为MySQL的表来处理,但不支持索引。可以作为一种数据交换的机制。存储的数据直接可以在操作系统里,用文本编译器,或者excel读取。对于数据的快速导入、导出是有明显优势的。
创建CSV表时,服务器会创建一个纯文本数据文件,其名称以表名开头并带有.CSV扩展名,将数据存储到表中时,存储引擎将其以逗号分隔值格式保存到数据文件中。
Memory引擎:
Memory采用的逻辑时内存,响应速度快,但是当进程崩溃时数据会丢失。要求存储的数据是数据长度不变的格式。
Memory同时支持哈希索引和B+数索引。至少比MyISAM表要快一个数量级。表的大小是受到限制的,主要取决于两个参数,分别是max_rows和max_heap_table_size。
数据文件与索引文件分开存储。每个基于Memory存储引擎的表实际对应一个磁盘文件,文件名与表明相同,类型为frm类型,该文件中只存储表的结构,数据文件都是存储在内存中的。有利于数据的快速处理,提高整个表的处理效率。
缺点是:数据易丢失,生命周期短。
适用场景:
目标数据比较小,而且频繁的进行访问。在内存中存放数据,如果太大会造成内存溢出,可以控制max_heap_table_size控制Memory表的大小。如果数据是临时的,必须立即可用得到,那么可以放在内存中。存储的数据突然间丢失也没有太大关系。
Federated引擎:
访问远程表。
Federated引擎是访问其他的MySQL服务器的一个代理,提供了一种很好的跨服务器的灵活性,但是有很多问题。因此默认是禁用的。
Merge引擎:
管理多个MyISAM表构成的表集合。
NDB引擎:
MySQL集群专用存储引擎。
NDB引擎主要用于MySQL Cluster分布式集群环境。