在使用MySQL的过程中,有关于MyISAM和InnoDB两概念的一些问题,在最后的两个引擎之间的差异一直在我的脑海中。为了解开这个谜,搜索网络,找到如下信息:



MyISAM是MySQL的默认数据库引擎(前5.5版)。它是由早期的改进(索引顺序存取方法:索引顺序存取方法)。虽然性能优良,有一个缺点:交易是不支持的。然而,近年来,也介绍了MySQL InnoDB(另一个数据库引擎)提高参考完整性和并发行为处理机制,并逐步取代MyISAM。

InnoDB,一个MySQL数据库引擎,是二进制的MySQL ab.innodb出版的标准之一是由级公司开发和甲骨文公司在2006年5月获得。与传统的ISAM和MyISAM和InnoDB相比,最大的特点是它支持符合ACID事务(transaction)的功能,类似于PostgreSQL。目前,InnoDB使用双轨授权,一个是GPL授权,和其他专有软件授权。

MyISAM和我们之间的区别是什么

1。存储结构

MyISAM:每个MyISAM存储在磁盘分为三档,第一个文件名开头的表的名称,以及扩展名表示的文件。文件存储表定义的类型,数据文件的扩展is.myd(MYDATA),索引文件的扩展is.myi(myindex)。

InnoDB:所有的表都被存储在相同的数据文件(或多个文件或单独的表空间文件)。InnoDB表的大小只受限于操作系统文件的大小,通常2gb。

2。存储空间

MyISAM:它可以被压缩和存储空间小,支持三种不同的存储格式:静态表(默认,但注意到年底的数据不能有空格,将被删除),动态表,压缩表。

InnoDB:更多的内存和存储是必要的,它将设立专门的缓冲池内存中缓存数据和索引。

三.可移植性、备份和恢复

MyISAM: data is stored in the form of a file, so it will be convenient for cross platform data transfer.A table can be operated on a single table when it is backed up and recovered.

InnoDB:一个免费的解决方案可以复制一个数据文件,一个binlog备份,或者就是比较痛苦的,当数据量达到几十G。

4,事务支持

MyISAM:强调的是性能,每个查询执行的原子性,它比InnoDB类型更快,但是不提供事务支持。

InnoDB:提供高级的数据库功能,如交易支持交易,外部键,等等。交易安全(交易安全(酸标准))表(提交),事务回滚,崩溃恢复能力。

5、auto_increment

MyISAM:联合指数可以与其他领域建立了发动机的自动增长必须指数。如果它是一个综合指数,自动增长不能是第一列。它可以根据前面的列递增。

InnoDB:InnoDB必须包含一个索引,只是场。发动机的自动增长的列必须是一个指标,如果它是一个综合指标,它必须是复合索引的第一列。

6、表锁差

MyISAM:只有表级锁支持。当用户使用MyISAM表,选择、更新、删除和插入语句自动锁表。如果锁定后的表对INSERT并发满意,则可以在表的最后插入新数据。

InnoDB:支持交易和行级锁是InnoDB的最大特点。排锁大大提高了多用户并发操作的新能力。但是innodb的行锁是唯一有效的在关键的地方,和非重点,将锁定所有表。

7。全文索引

MyISAM:全文索引支持全文型

InnoDB:全文型全文索引是不支持的,但我们可以用狮身人面像插件支持全文索引,而且效果更好。

8。表的主键

MyISAM:允许一台没有任何指标和存在主键和索引的行地址保存。

InnoDB:如果没有主键或唯一索引非空,它会自动生成一个6字节的主密钥(用户不可见)。数据是主要索引的一部分,而附加索引则保存主要索引的值。

9。表的特定行数。

MyISAM:拯救与表中的行的总数,如果select count(*)从表;价值将直接取出。

InnoDB:没有保存表的总排数。如果我们使用select count(*)表,它会遍历整个表和消耗很多,但加入后使的情况下,MyISAM和InnoDB会一样。

10、豆腐操作

MyISAM:如果大量选择执行时,MyISAM是更好的选择。

InnoDB:如果你的数据执行大量的插入或更新,InnoDB表应用于性能considerations.delete优于在性能方面InnoDB。但当删除表中的数据时,InnoDB将不会重新创建表,但删除行线。如果InnoDB是空的,保存的数据量大,最好使用TRUNCATETABLE。

11、外键

MyISAM:不支持

InnoDB:支持

通过以上的分析,基本上可以考虑InnoDB取代MyISAM引擎的使用,原因是InnoDB的许多优良特性,如交易支持、存储过程、视图、行级锁定等等,在大量并发,相信InnoDB的性能当然比MyISAM更好。此外,任何表不是万能的。只有选择合适的表类型适当的业务类型,我们可以最大限度地提高MySQL的性能优势。如果不是很复杂的Web应用,非关键应用程序,或继续考虑MyISAM,这个具体情况可以考虑。