MySQL的InnoDB引擎和MyISAM引擎对比

InnoDB

 

 

存储限制

64TB

事务

Yes

锁级别

Row

多版本并发控制

Yes

支持地理空间数据类型

Yes

支持地理空间数据索引

Yes

B-tree索引

Yes

T-tree索引

No

Hash索引

No

Full-text搜索索引

Yes

集群索引

Yes

数据缓存

Yes

索引缓存

Yes

数据压缩

Yes

数据加密

Yes

支持数据库集群

No

支持复制

Yes

支持外键

Yes

备份/时间点恢复

Yes

支持查询缓存

Yes

更新数据字典统计信息

Yes

 

 

 

 

        1、如果你的服务器因为硬件或软件的问题崩溃了,不管当时数据库发生了什么,在重启数据库后都不需要做任何特殊的操作。InnoDB的崩溃恢复会自动分析在崩溃前提交的所有变化,并且回滚当时正在执行但没有提交的变化。只需要重启,然后继续之前的操作就可以了。

 

        2、InnoDB存储引擎维护着它自己的缓存池,可以在访问数据时缓存主内存中的表和索引数据。经常用到的数据直接在内存中处理。缓存适用于多种信息,并且加速处理。在专用数据库服务器山,通常将多达80%的物理内存分配给InnoDB的缓存池。

 

        3、如果你将相关的数据分割为表,你可以设置强制使用完整性外键。更新或删除数据,在其他表中的相关数据会被自动删除或更新。如果要将数据插入到辅助表中,并且主表中没有相应数据,则错误的数据将会自动被删除。

 

        4、如果在硬盘上或内存中的数据损坏了,校验机制会在你使用虚拟数据前提醒。

 

        5、当你为数据库的每张表设计适当的主键列时,这些列的所有操作会自动优化。使用WHERE子句,ORDERBY子句,GROUP BY子句和join操作主键列会特别快。

 

        6、插入,更新和删除操作通过更改缓冲的机制来优化。InnoDB不仅仅支持对一张表进行并行读写操作,还将更改的数据缓存到流水线磁盘I/O。

 

        7、它的性能优势不仅限于运行长时间查询的大表,当多次重复访问同一行数据时,自适应散列索引可以使这些查询更加快,就像从散列表中取数据一样。

 

        8、可以压缩表和相关的索引。

 

        9、可以创建和删除对性能和可用性影响较小的索引。

 

        10、删除每个文件的表格控件很快,并且可以释放硬盘空间使操作系统可以重新使用,而不是只是释放只有InnoDB可以重新使用的系统表控件中的控件。

 

        11、表数据的存储布局对于BLOB和长文本字段而言,具有DYNAMIC行格式。

 

        12、可以通过查询INFORMATION_SCHEMA表来监视存储引擎的内部工作。

 

        13、可以通过查询Performance Schema表来监视存储引擎的性能详情。

 

        14、可以自由混合使用来自于MySQL其他存储引擎的表和来自InnoDB的表,即使是在同一个语句中。例如,你可以使用join操作将InnoDB和MEMORY表中的数据组合为一个查询。

 

        15、InnoDB专为处理大数据而设计用于高效CPU和最大性能。

 

        16、InnoDB表可以处理大量的数据,即使是操作系统的文件大小被限制为2GB也一样。

 

MyISAM

 

 

存储限制

256TB

事务

No

锁级别

Table

多版本并发控制

No

支持地理空间数据类型

Yes

支持地理空间数据索引

Yes

B-tree索引

Yes

T-tree索引

No

Hash索引

No

Full-text搜索索引

Yes

集群索引

No

数据缓存

No

索引缓存

Yes

数据压缩

Yes

数据加密

Yes

支持数据库集群

No

支持复制

Yes

支持外键

No

备份/时间点恢复

Yes

支持查询缓存

Yes

更新数据字典统计信息

Yes

 

 

 

 

        每个MyISAM表在硬盘上都存储为三个文件,这三个文件都以表名开头,扩展名表示文件类型。.frm文件存储表格式,数据文件的扩展名是.MYD,索引文件的扩展名是.MYI。在MySQL5.7,通常很有必要使用ENGINE来指定MyISAM,因为默认的引擎是InnoDB。

 

 

        1、所有数据值都以低字节优先存储。这就是的数据机器和操作系统相互独立。二进制可移植性的唯一要求是机器使用两个补码有符号整数和IEEE浮点格式。这些要求在主流机器中得到广泛应用。二进制兼容性可能不适用于有时具有特殊处理器的嵌入式系统。

 

        存储数据低字节优先没有明显的速度损失,表行中的字节通常是未对齐的,并且以相反的顺序,顺序读取未对齐的字节需要更多的处理。此外,与其他代码相比,提取列值的服务器中的代码不是时间关键。

 

        2、所有数值型的键值都先与高字节一起存储,以允许更好的索引压缩。

 

        3、支持大文件(最大63位文件长度)的文件系统和操作系统支持大文件。

 

        4、一个MyISAM表限制最大行数为(2^32)^2。

 

        5、每个MyISAM表的最大索引数是64,每个索引的最大列数是16。

 

        6、密钥的最大长度为1000字节,这也可以通过修改源或重新编译来更改。对于长度超过250字节的密钥,使用比默认值1024字节更大的密钥块大小。

 

        7、当以有序顺序来插入行(使用AUTO_INCREMENT列时),索引树将会被拆分,以使高位节点只包含一个键,提高了索引树的空间利用率。

 

        8、支持每张表的一个AUTO_INCREMENT列内部处理。MyISAM为INSERT和UPDATE操作自动更新该列。这就会使AUTO_INCREMENT列更快(至少10%)。序列顶部的值在被删除后不能被重用。(当AUTO_INCREMENT列被定义在多列索引的最后一列时,序列顶部的值被删除后还可重用。)AUTO_INCREMENT值可以通过ALTER TABLE或myisamchk重置。

 

        9、当将删除与更新和插入进行混合时,动态大小的行会更加碎片化。如果下一块被删除,可通过通过自动组合相邻的已删除的块和通过扩展块来完成。

 

        10、MyISAM支持同时插入:如果一个表的数据文件中没有空闲的块,可以在其他线程从表中读取数据时插入新的行。空闲的块可以在删除行或者动态长度行的更新数据比现在更多时出现。当所有的空闲块都被使用后,将来的插入将会再次并入。

 

        11、可以将数据文件和索引文件放到不同的物理设备的不同目录中,通过DATA DIRECTORY和INDEX DIRECTORY表选项以更快的速度CREATE TABLE。

 

        12、BLOB和TEXT列可以被索引。

 

        13、索引列中允许NULL值,每个键需要0到1个字节。

 

        14、每一个字符列可以有一个不同的字符集。

 

        15、MyISAM的索引文件有一个标识,来指明表是否正确的关闭。如果mysqld是以myisam-recover-options操作启动的,MyISAM的表会在启动时自动检查,还会修复没有正确关闭的表。

 

        16、myisamchk以update-state方式启动时会标记表为已检查。Myisamchk --fast只会检查没有标记的表。

 

        17、myisamchk --analyze存储部分密钥以及整个密钥的统计信息。

 

        18、myisamchk可以包装BLOB和VARCHAR列。

 

        19、支持真正的VARCHAR类型,一个VARCHAR列以一个或两个字节存储的长度开始。

 

        20、具有VARCHAR列的表可能具有固定或动态行长度。

 

        21、表中VARCHAR和CHAR列的长度总和可能高达64KB。

 

        22、任意长度UNIQUE约束。

 

InnoDB和MyISAM的区别

 

        1、InnoDB支持外键,MyISAM不支持外键。

 

        2、InnoDB支持事务,MyISAM不支持事务。

 

        3、InnoDB的锁是行级锁,MyISAM的锁是表级锁。

 

        4、InnoDB不保存表的具体行数,select count(*)时会扫描整个表计算有多少行;MyISAM会保存行数。

 

        5、对于AUTO_INCREMENT类型的字段,InnoDB的索引只能包含该字段;MyISAM中AUTO_INCREMENT类型的字段可以和其他字段建立联合索引。

你可能感兴趣的:(数据库)