MySQL中InnoDB和MyISAM引擎的区别

直到MySQL5.5之前,MySQL的默认殷勤都是MyISAM。随着新版本的发布,InnoDB成功上位,成为MySQL的默认引擎。这两种引擎的使用都非常广泛,那么它们有什么区别和联系

简短介绍

  • InnoDB: 默认的事务型引擎,是最重要也是使用最广泛的存储引擎。可以用来处理大量的短期事务,具有优秀的性能以及自动崩溃回复特性。
  • MyISAM: 非事务型引擎,提供了大量的特性,包括全文索引、压缩、空间函数等。不支持事务以及行级锁,并且无法在崩溃之后安全恢复。

异同

存储

  • InnoDB的数据存储在表空间中,表空间是一个由引擎管理的黑盒子,由一系列的数据文件组成。在MySQL4.1之后,InnoDB可以将每个表的数据和索引存放在单独的文件中。
  • MyISAM会将表存储在两个文件中:数据文件以及索引文件,分别以.MYD和.MYI为拓展名。

加锁与并发

  • InnoDB采用MVCC来支持高并发,并且实现了4个标准的隔离级别。InnoDB锁的粒度最小为行级锁。
  • MyISAM只支持对整张表加锁。

索引

InnoDB和MyISAM引擎采用的都是B+树作为索引,但是它们的不同点是:

  • MyISAM引擎的索引数据在磁盘上是按照顺序存储的。InnoDB引擎的表数据是随机分布的。
  • MyISAM的主键索引的叶子节点下只存放数据在磁盘上的指针,其他次级索引也一样。InnoDB索引的主键索引的叶子节点下直接存放数据,其他次级索引的叶子节点指向主键ID。

外键

  • InnoDB引擎支持外键的定义。
  • MyISAM殷勤不支持外键的定义。

count(*) 函数的执行

  • 对于InnoDB引擎而言,执行该函数需要扫描表中的所有行。
  • 对于MyISAM引擎而言,执行该函数只需要读取保存的元数据。

总结

MyISAM引擎设计简单,数据以紧密格式存储,在读密集环境下的性能较好。如果不需要使用事务操作并且不需要使用InnoDB的一些特性,那么可以选择该引擎。

InnoDB引擎是如今MySQL的默认引擎,支持事务操作并且具有良好的性能,可靠性和安全性更胜一筹。在写和更新操作密集或者需要事务操作的的环境下,应该选择使用该引擎。

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