我是靠谱客的博主 忧郁绿茶,最近开发中收集的这篇文章主要介绍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的默认引擎,支持事务操作并且具有良好的性能,可靠性和安全性更胜一筹。在写和更新操作密集或者需要事务操作的的环境下,应该选择使用该引擎。

最后

以上就是忧郁绿茶为你收集整理的MySQL中InnoDB和MyISAM引擎的区别的全部内容,希望文章能够帮你解决MySQL中InnoDB和MyISAM引擎的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部