MySQL存储引擎

2019-07-14 00:43发布

官方文档:https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html

1.InnoDB存储引擎

InnoDBMySQL的默认事务型引擎,也是使用最广泛的存储引擎。InnoDB被设计用来处理大量的短期事物。InnoDB的性能和崩溃自动恢复特性使得它在非事物型存储的需求中也很流行。除非有非常特别的原因需要使用其它的存储引擎,否则应该优先考虑InnoDB引擎。 InnoDB存储引擎特性 1.最大存储64TB 2.标准ACID事务 3.行级锁 4.多版本并发控制(MVCC) 5.地理空间数据类型支持 6.地理空间索引支持 7.B-TREE索引支持 8.全文索引支持 9.聚簇索引 10.数据缓存 11.查询缓存 12.索引缓存 13.压缩数据 14.数据加密 15.外键支持 16.备份/恢复时间点 17.复制支持 18.字典表统计更新 InnoDB存储引擎优势 1.如果服务器因硬件或软件问题而崩溃,无论数据库中发生了什么,在重新启动数据库后不需要做任何的操作,InnoDB将自动恢复到提交后的状态。 2.InnoDB在内存中维护它自己的缓存池对表和索引数据缓存,常用的数据直接在内存中处理。缓存适用于多种类型的信息,并加快了处理速度。在数据库服务器,高达80%的物理内存通常是分配给InnoDB缓冲池。 3.如果将相关的数据分割在不同的表中,可以设置外键来强制完整性引用。更新或删除数据,其它表中的相关数据将自动更新或删除。 4.如果数据在磁盘或内存中损坏,那么在使用之前检验机制会提醒你数据为虚假数据。 5.当表设置了适当的主键列时,涉及主键列的操作会自动优化。在where子句、order by子句、group by子句和连接操作中引用主键列的速度将非常快。 6.插入、更新和删除使用“更改缓冲”的自动优化机制精简磁盘I / O操作。 7.性能不会受到大型表的连续查询影响。当连续访问表中同一行数据时,自适应哈希索引能够使这些查找更快。 8.你可以压缩表和相关的索引。 9.创建和删除索引对性能和可用性影响更小。 10.截短表空间文件的速度非常快,并释放磁盘空间。释放的磁盘空间是系统可重用的而不是只有InnoDB可以复用的系统表空间。 11.动态行的格式使得BLOB和长文本字段的数据存储更有效率。 12.你可以通过查询information_schema表监控存储引擎的内部工作。 13.你可以通过查询Performance Schema表来监视存储引擎的性能细节 14.你可以在一条查询语句中混合InnoDB的表和其它存储引擎的表。例如,你可以使用join操作在一个查询里联合InnoDB表和MEMORY表的数据。 15.InnoDB在进行大规模数据处理时对CPU性能进行了优化。 16.InnoDB表可以处理大量的数据,即使操作系统的文件大小限制为2GB

2.MyISAM存储引擎

MyISAMMySQL5.1之前版本的默认存储引擎。MyISAM提供了大量的特性,但MyISAM不支持事务和行级锁,而且崩溃后无法安全恢复。对于只读的数据或者表比较小,可以忍受恢复操作,则可以继续使用MyISAM MyISAM存储引擎特性 1.最大存储256TB 2.表级锁 3.地理空间数据类型支持 4.地理空间索引支持 5.B-TREE索引支持 6.全文索引支持 7.索引缓存 8.查询缓存 9.压缩数据 10.数据加密 11.时间点备份/恢复 12.复制支持 13.字典表统计更新 MyISAM存储引擎优势 1.如果表不会再进行修改操作,那么这样的表或许适合采用MyISAM压缩表。压缩表不能进行修改。压缩表可以极大地减少磁盘空间占用,因此可以减少磁盘I/O,从而提升查询性能。压缩表也支持索引,但索引也是只读的。 2.MyISAM引擎设计简单,数据以紧密格式存储,所以在某些场景下性能很好。 3.每张表最多支持64个索引,每个索引最多支持16个字段。 4.最大的key长度为1000字节。 5.BLOBTEXT列可以基于前1000字节创建索引。 6.索引列中允许null值。 7.可以将数据文件和索引文件放在不同物理设备的不同目录中来得到更快的速度。 8.每个列可以有不同的字符集。

3.MEMORY存储引擎

MYMORY存储引擎(以前称为HEAP)是将数据存储在内存中的专用表。因为所有的数据都保存在内存中,至少比一般的表要快一个数量级。由于数据易受崩溃、硬件问题或电源中断的影响,只能将这些表用作临时工作区或其他表数据的只读缓存。MYMORY不支持BLOBTEXT类型,并且每行的长度是固定的。 MYMORY存储引擎特性 1.最大存储与物理内存相关 2.表级锁 3.B-TREE索引支持 4.哈希索引支持 5.复制支持 6.时间点备份/恢复 7.查询缓存 8.数据加密 9.字典表统计更新

4.CSV存储引擎

CSV引擎可以将普通的CSV文件(都好分割的文件)作为MySQL的表来处理。数据文件是纯文本文件,不支持索引。可以将Excel等电子表格软件中的数据存储为CSV文件复制到MySQL数据目录下就能在MySQL中打开使用。同样,如果将数据写入到CSV引擎表,其它的外部程序也能立即从表的数据文件中读取CSV格式的数据。因此CSV引擎也可以作为一种数据交换的机制。

5.ARCHIVE 存储引擎

ARCHIVE引擎用于存储大量没有索引的数据。只支持INSERTSELECT操作。ARCHIVE引擎会缓存所有的写并利用zlib对插入的行进行压缩,所以比MyISAM表的磁盘I/O更少。但是每次SELECT查询都需要执行全表扫描。所以ARCHIVE表适合日志和数据采集类应用,或者在一些需要更快速的INSERT操作的场合下使用。 ARCHIVE存储引擎特性 1.最大存储无限制 2.行级锁 3.压缩数据 4.数据加密 5.复制支持 6.时间点备份/恢复 7.查询缓存 8.字典表统计更新

6.BLACKHOLE 存储引擎

BLACKHOLE引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存,但服务器会记录BLACKHOLE表的日志。一般不使用这个存储引擎。

7.MERGE存储引擎

MERGE存储引擎也被称为 MRG_MyISAM引擎,是MyISAM引擎的一个变种。MERGE表是由多个MyISAM表合并而来的虚拟表。如果将MySQL用于日志或者数据仓库类应用,该功能可以发挥作用。引入分区功能后,该引擎已经被放弃。

8.FEDERATED存储引擎

FEDERATED引擎是访问其它MySQL服务器的一个代理,它会创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行。该引起看起来提供了一种很好的跨服务器的灵活性,但也经常带来问题,因此默认是禁用的。

9.EXAMPLE存储引擎

EXAMPLE存储引擎是一个不做任何事情的存根引擎。其目的是作为MySQL源代码中的一个示例,说明如何开始编写新的存储引擎。因此,它主要是感兴趣的开发人员使用。