John Jiang

a cup of Java, cheers!
https://github.com/johnshajiang/blog

   :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  131 随笔 :: 1 文章 :: 530 评论 :: 0 Trackbacks
MySQL: MyISAM or InnoDB?
通过JavaLobby看到的一篇博文,为选择MySQL的数据表引擎提供了一些意见,希望对大家有帮助。(2009.05.31最后更新)
我这个可爱的小哥哥祝可爱的小朋友们节日愉快 ^_^

    MyISAM是MySQL的默认存储引擎,但很多人忘记还有其它的选择。决定使用哪种(哪些)存储引擎可能需要些技巧,但评估一下MyISAM是否适合你的需要还是值得的。有一组存储引擎可用,但我将只关注MyISAM和InnoDB,因为它们被用的最多。
需考虑的问题:
    你是否需要外键?
    你是否需要事务?
    你是否需要全文索引?
    你的数据访问(查询)模式是什么?
    你的数据集有多大?

    思考上述问题将使你走入正确的方向,但有些例外。如果你使用事务或外键,就使用InnoDB。要使用全文索引,你常需选择MyISAM,因为它内建地支持这一特性;但是,MyISAM难以应对超过200万的数据行。你可以使用Sphinx以使你的InnoDB表能获取全文索引,但这需要花费一些时间。
    数据集的大小是决定你使用哪种引擎的主要因素。由于InnoDB的事务和崩溃恢复特性,对于较大的数据集,则倾向于该引擎。然而,恢复MyISAM数据表所花费的时间由数据集的大小来衡量,但恢复InnoDB所花费的时间由事务日志的大小来衡量-而你对日志有一定的控制力。例如,相较于恢复 InnoDB数据表所需要的几分钟,你可能需要几小时甚至几天时间来恢复MyISAM数据表。
    你读/写数据表的方式可能会极大地影响你所使用的存储引擎的性能。在MyISAM数据表中执行COUNT()会很快,但对于InnoDB数据表则十分痛苦,最好避免。在InnoDB数据表中查找主键极其的快,但要注意到,太长的主键会影响到性能。批量插入在MyISAM数据表更快些,但批量更新在 InnoDB中会较快些--特别是当进行并发增加时。
    那么你应该选择哪种引擎呢?如果你工作在一个小项目中,那么MyISAM可能正适合你。甚至在较大环境中使用MyISAM也能获取很大的成功,但这依具体情况不同而不同。如果你计划用于非常大的数据集,并且需要事务或外键约束,那就应该直接使用InnoDB。但需要记住,相较于MyISAM,InnoDB 数据表需要很大的内存和存储空间。将100GB的MyISAM数据表转化成InnoDB数据表就会表现得令人吃惊的坏。

posted on 2009-05-31 21:41 John Jiang 阅读(1807) 评论(2)  编辑  收藏 所属分类: DatabaseMySQL

评论

# re: MySQL: MyISAM or InnoDB?(译) 2009-06-01 10:06 HiMagic!
"将100GB的MyISAM数据表转化成InnoDB数据表就会令你大吃一惊。"
-- 会差多少倍?  回复  更多评论
  

# re: MySQL: MyISAM or InnoDB?(译) 2009-06-01 17:54 Sha Jiang
@HiMagic!
我不知道 *_*  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: