rainyzz's blog

MySQL中InnoDB引擎与MyISAM引擎的据别

MySQL拥有不同类型的数据存储引擎来应对不同的使用场景,比较常见的有InnoDB,MyISAM,Archive以及Memory。其中Archive主要是应用场景是数据存储,对数据压缩做的比较好,Memory主要是将数据存储在内存中。除此之外比较常见的就主要是InnoDB和MyISAM了。

存储结构

MySQL中数据存储的结构主要是B+树,树的非叶子节点存储索引值,树的叶子节点存储数据。

就不同引擎来说,InnoDB的索引和数据在同一文件中,叶子节点直接存储全部数据。MyISAM的索引和数据是分开的,索引文件中叶子节点存储的是在数据文件中的位置。因为索引和数据是分开的,可以将索引文件单独压缩,一次性载入的节点更多,加快了检索速度。

再顺便说一下为什么数据库中用的都是B+树而不是B树。

  • B+树非叶子节点不存数据,能一次载入更多节点
  • B+树方便顺序表扫描以及range的查询

InnoDB

InnoDB是为比较大规模的数据设计的,同时拥有完整的事务管理,外键,完整的事务日志以及故障恢复功能。

InnoDB比较适合数据量大,可靠性要求较高,以及更新插入都比较频繁的情况。

MyISAM

MyISAM设计是为了速度优先,没有事务管理,没有外键功能,故障恢复也很费时间。

MyISAM拥有全文索引功能,对Count操作也不需要扫描整个表,比较适合查询比较频繁的情况。