MySql性能调优(六)InnoDB引擎和Myisam引擎的性能对比

      对于这两种存储引擎的选择,要根据项目的应用特点来权衡,而对于复杂的应用系统,也可以根据实际情况来选择多种存储引擎的组合。不过这种方法不建议采取。

     MyISAM支持全文索引,这是一种基于分词创建的索引,支持一些比较复杂的查询,但不是事务安全的,而且不支持外键。每张MyISAM表存放在3个文件中:frm文件存放表格定义;数据文件是MYD;索引文件是MYI;对于MyISAM表,可以手工或者自动执行检查或修复操作。

       InnoDB是事务型引擎,支持回滚,具有崩溃恢复能力,多版本并发控制,支持ACID事务、支持行级锁定(InnoDB的行级锁不是绝对的,如果一个SQL语句没有使用到索引,那么InnoDB会锁全表)。

      InnoDB的工作原理:就是把数据捞带内存当中,被用户读写,这样大大增加了性能。当数据全部加载到内存当中时,这时的性能是最好的,它的设计理论是充分利用内存,减少磁盘I/O使用率。

MyISAM和InnoDB的区别有以下几点:

1.MyISAM是非事务安全型的,而InnoDB是事务安全型的,也就是ACID事务支持。

2.MyISAM锁是表级锁,锁开销小,而InnoDB支持行级锁定,锁管理开销大,支持更好的并发写操作。

3.在最新的版本中,两者都已经支持全文索引。

4.MyISAM相对简单,管理方便,因此在效率上优先于InnoDB,小型应用可以考虑使用。

5.MyISAM表是保存成文件的形式,在跨平台的数据转移中使用其存储会省去不少的麻烦。

6.InnoDB表比MyISAM表更安全,可以保证在数据不丢失的情况下切换非事务表到事务表。

总结:

     MyISAM存储引擎的读锁和写锁是互斥的,读写操作时串行的。当一个进程请求某个MyISAM表的读锁,同时另一个进程也请求通一表的写锁,MySQL是写进程先获得锁,不仅如此,即使读请求先到锁等待队列,写请求后到,写锁也会插到读锁请求之前,这是因为MySQL会认为写请求一般要比读请求重要,这也是MyISAM表不太适合有大量更新操作和查询操作应用的原因,因为大量的更新操作会造成查询操作很难忽地读锁,从而可能永远阻塞。

    InnoDB用于事务处理应用程序,具有众多特性,包括支持ACID事务、行锁等。如果应用中需要执行大量的读写操作,则应使用InnoDB,这样可以提高多用户并发操作的性能,所以要尽量优先使用InnoDB引擎。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值