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的默认引擎,支持事务操作并且具有良好的性能,可靠性和安全性更胜一筹。在写和更新操作密集或者需要事务操作的的环境下,应该选择使用该引擎。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值