码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-06-01 09:47:50      阅读:217      评论:0      收藏:0      [点我收藏+]

标签: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引擎。

 

 

 

 

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

标签:mysql性能调优六   innodb引擎和myisam引擎的性能   

原文地址:http://blog.csdn.net/u012675743/article/details/46292863

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!