什么是MySQL中的InnoDB和MyISAM?

什么是MySQL InnoDBMyISAM

InnoDBMYISAMMySQL存储引擎。

这两个不同的locking实现: InnoDBlocking表中的特定行, MyISAMlocking整个MySQL表。

您可以通过在DB中创build表格时指定MYISAMInnoDB来指定types。

看一下

InnoDB和MyISAM

InnoDB是MySQL的存储引擎,作为MySQL AB分发的所有当前二进制文件中的标准。 它的主要优势在于可用于MySQL的其他存储引擎是符合ACID的事务支持

MyISAM是5.5之前的MySQL关系数据库pipe理系统的默认存储引擎。 它基于较旧的ISAM代码,但有许多有用的扩展。 MyISAM的主要缺陷是没有交易支持。 MySQL 5.5及更高版本已经切换到InnoDB引擎,以确保引用完整性约束和更高的并发性。

他们是存储引擎。

http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html

MyISAM:默认的MySQL存储引擎,在Web,数据仓库和其他应用程序环境中使用最多的。 MyISAM在所有MySQLconfiguration中都受支持,并且是默认存储引擎,除非您已将MySQLconfiguration为默认使用不同的默认存​​储引擎。

InnoDB:MySQL的事务安全(ACID兼容)存储引擎,具有提交,回滚和崩溃恢复function来保护用户数据。 InnoDB行级locking(不升级到更粗颗粒度的锁)和Oracle样式一致的非locking读取增加了多用户并发性和性能。 InnoDB将用户数据存储在聚簇索引中,以减less基于主键的常见查询的I / O。 为了保持数据完整性,InnoDB还支持FOREIGN KEY引用完整性约束。

我想补充一点,有能力为每个表指定一个特定的存储引擎是MySQL的关键优势之一(除了易用性和良好的性能,无需调整)。 对于需要交易的所有操作,只要坚持使用InnoDB。 但是,在某些情况下不需要事务处理时,MyISAM可以真正加快速度 – 与InnoDB相比,需要更less的磁盘空间和内存。

也就是说,InnoDB一直在变好:

InnoDB 1.1性能和可伸缩性增强

MyISAM并不遵循ACID,而是遵循事务来维护数据完整性的InnoDB。

MyISAM支持并发插入:如果一个表在数据文件中间没有空闲块,那么可以在其他线程从表中读取数据的同时向其中插入新行。 MySqlDoc

这就是为什么,MyISAM更快,占用空间更less。 例如,MySQL MyISAM存储引擎不支持tranactions。 MySQL MYISAM的约束有一点叫做concurrent-insert默认情况下,variables设置为1,并发插入按刚才描述的方式处理。 如果它设置为0,并发插入被禁用。 如果设置为2,即使对于已删除行的表,也允许在表的末尾插入并发数据。 如果在表的中间没有空洞/已删除的行(在并发插入时),则可以执行INSERT语句,以便在同一时间将行添加到表的末尾。

默认的隔离级别mysql InnoDB是“Read Repeatable”。 对于MyISAM,没有事务。 InnoDB使用行级locking,而MyISAM只能使用表级locking,这就是为什么InnoDB崩溃恢复比MyISAM更好的原因。 如果想避免并发效应,必须手动获取 MyISAM中的表级锁