MyISAM与innoDB表引擎的区别

MyISAM与InnoDB表引擎的区别

首先,MyISAM和InnoDB都是属于MySQL的其中两种存储引擎,而这两种也是用得相对来多一些,那么下面就来介绍一下这两种表引擎的区别。

1、事务支持

MyISAM不支持事务,而InnoDB支持事务。

事务:访问并更新数据库中数据的执行单元。 事务操作中,要么都执行要么都不执行。

2、存储结构

MyISAM:每个MyISAM在磁盘上存储成三个文件。

  • .frm文件存储表结构
  • .MYD文件存储数据
  • .MYI文件存储索引

InnoDB:主要分为两种文件进行存储

  • .frm存储表结构
  • .ibd存储数据和索引(也可能是多个.ibd文件,或者是独立的表空间文件)

3、表锁差异

MyISAM:

  • 只支持表级锁。用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。

InnoDB:

  • 支持事务和行级锁,是Innodb的最大特色。
  • 行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

4、表主键

MyISAM:

  • 允许没有任何索引和主键的表存在,索引都是保存行的地址。

InnoDB:

  • 如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
  • InnoDB的主键范围更大,最大是MyISAM的2。

5、表的具体行数

MyISAM:

  • 保存有表的总行数,如果 select count() from table; 会直接取出该值。

InnoDB:

  • 没有保存表的总行数,只能遍历。如果 select count() from table; 就会遍历整个表,内存消耗很大,但是在加了where条件后,MyISAM和InnoDB处理的方式都一样。

6、CURD(增删改查)操作

MyISAM:

  • 如果执行大量的select,MyISAM是更好的选择。

InnoDB:

  • 如果你的数据执行大量的insertupdate,出于性能方面的考虑,应该使用InnoDB表。delete从性能上来说InnoDB更优,但delete from table 时,InnoDB不会重新建立表,而是一行一行的删除,在InnoDB上如果要清空保存有大量数据的表,可以使用truncate table 这个命令。

7、外键

MyISAM:不支持

InnoDB:支持

8、查询效率

  • MyISAM相对简单,所以在效率上要由于InnoDB,小型应用可以考虑使用MyISAM。

9、应用场景

MyISAM:

  • 管理非事务表。提供高速存储和检索,以及全文搜索能力。
  • 如果应用中需要执行大量的select查询,那么MyISAM是更好的选择。

InnoDB:

  • InnoDB自身很多良好的特点,比如事务支持、存储过程、视图、行级锁定等等,在并发很多的情况下,InnoDB的表现肯定要比MyISAM强很多。
  • 如果应用中需要执行大量的insert或update操作,则应该使用InnoDB,这样可提高多用户并发操作的性能。

还有就是,任何一种表都不是万能的,只有恰当的针对业务类型来选择合适的表类型,才能最大发挥MySQL的性能优势。现在默认使用InnoDB。

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