MyISAM和InnoDB引擎的区别

区别

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁。 而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

  1. 构造上的区别:MyISAM在磁盘上存储成三个文件,其中.frm文件存储表定义;.MYD (MYData)为数据文件;.MYI (MYIndex)为索引文件。而Innodb是由.frm文件、表空间(分为独立表空间或者共享表空间)和日志文件(redo log)组成。
  2. 事务上的区别:MyISAM不支持事务,而InnoDB支持事务。
  3. 锁上的区别:MyISAM使用的是表锁;而InnoDB使用的行锁(当然InnoDB也支持表锁)。表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许,因此MyISAM支持的并发量低,但MyISAM不会出现死锁; 行级锁:只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。因此行锁能大大的减少数据库操作的冲突,但有时会导致死锁。
  4. 是否支持外键的区别: MyISAM不支持外键,InnoDB支持外键。
  5. select count(*)的区别:对于没有where的count(*)使用MyISAM要比InnoDB快得多。因为MyISAM内置了一个计数器,count(*)时它直接从计数器中读,而InnoDB必须扫描全表来计算有多少行。InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
  6. 索引方式不同:MyISAM的索引文件和数据文件是分离的,索引文件通过指针来指向数据文件相应的行,而InnoDB的数据文件是按照索引的数据结构(B+Tree)来组织的,即InnoDB的数据文件被存储为一颗B+Tree。

应用场景

  1. MyISAM适合:(1)做很多count 的计算(2)插入不频繁,查询(select)非常频繁(3)没有事务的情况。
  2. InnoDB适合:(1)可靠性要求比较高,或者要求事务(2)表更新(update、insert)相当的频繁,并且行锁定的机会比较大的情况。

应用场景:
○ MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么
MyISAM是更好的选择。
○ InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE
操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM最好的选择。且MyISAM恢复速度快。可直接用备份覆盖恢复。
如果系统读少,写多的时候,尤其是并发写入高的时候。InnoDB就是首选了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值