概述
直到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引擎的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复